抽离 DirectProject 独立聊天容器并删除工作台壳 Direct 状态
- 新增 view/project-development/chat 模块:DirectProjectChatView 自己持有项目清单订阅、首屏锚点、历史分页、发送队列、附件、终止、草稿与本地消息 - DirectProjectChatView 入参收窄为项目路径、入口首轮需求(canonical content[])和两条权限门,Direct 状态不再穿过 App.tsx - 线程订阅与聊天 reducer 提成 useDirectThreadChatSubscription:subscribe/consume/notify 单飞循环、订阅欠账、SUBSCRIPTION_EXPIRED 重订与 DirectThreadChatState - chat/components 按「一个组件一个目录、逻辑与表现同目录」重组(ChatHeader、Composer、Conversation、SettingsDialog、ToolCallGroup) - DirectProjectChatView 拆成聊天头、会话区、回合、输入盒四个组件 - App.tsx 删除 Direct 专属 state/ref/effect/handler 与 directCodex 分支,首轮需求按 canonical content 交给聊天 - 工作台级动作(运行本地预览等)经 DirectProjectChatHandle.announce 交给聊天自己的本地消息流 - Direct 首轮认领记录提成 app/initialSupervisorMessageClaims,供各入口共用 - Rust 侧 Direct 契约 ts-rs 导出目录改到 chat/generated - 补齐 direct_codex_user_item/wire.rs 既有的 rustfmt 空格漂移 - 同步 ADR、实施计划、decision-log、pitfalls 与 Direct 技术文档
This commit is contained in:
@@ -7,3 +7,16 @@ AGC 项目开发工作台的普通项目固定使用 DirectProject;它不再
|
||||
项目工作台布局拥有跨面板的账户/钱包入口。钱包不再作为 `walletEntry` 传入 DirectProject 聊天上下文或聊天设置浮层,而是在 `ProjectDevelopmentView` 的布局级头部/工具栏独立渲染;本次只改变布局归属与嵌套关系,保留钱包入口本身的可用性。
|
||||
|
||||
这项边界选择是为了让 DirectProject 的事实源与生命周期可以独立测试和演进,同时避免把工作台级账户状态与聊天状态耦合;一次性替换通过 Git revert 回滚,不增加运行时开关、兼容别名或条件兼容分支。
|
||||
|
||||
## 模块结构
|
||||
|
||||
公开入口只有 `view/project-development/chat/DirectProjectChatView.tsx`,内部按职责分层:
|
||||
|
||||
- `components/`:表现层,一个组件一个目录,组件自己的逻辑与表现同目录(`components/ToolCallGroup/` 放 `ToolCallGroup.tsx` 与 `toolCallGroupPresentation.ts`;`components/DirectProjectComposer/` 放 `DirectProjectComposer.tsx`、`ComposerControls.tsx`、`chatComposerQueue.ts`、`chatComposerVoice.ts`)。
|
||||
- `controller/`:会话控制器 `useDirectProjectChatController`、项目清单订阅 `useDirectProjectManifest`,以及线程订阅与聊天 reducer 的独立 hook `useDirectThreadChatSubscription`。
|
||||
- `conversation/`、`history/`:纯模块(条目投影、历史分页、订阅锚点闸门、附件映射)。
|
||||
- `generated/`:Rust 侧 ts-rs 导出的 Direct 契约,不在前端手抄形状。
|
||||
|
||||
`useDirectThreadChatSubscription` 持有 `subscribe → consume → notify` 单飞循环与聊天 reducer 状态,是 DirectProject 运行态的唯一事实源;控制器只读它投影后的条目与回合忙态,历史分页通过同一个 reducer 并入。
|
||||
|
||||
工作台壳要把运行/预览这类工作台级动作的结果说给用户时,只通过 `DirectProjectChatView` 的 `ref` 句柄(`announce`)交给聊天自己的本地消息流;壳不持有 Direct 的聊天消息。
|
||||
|
||||
Reference in New Issue
Block a user