agent-Specialization/doc/frontend/next_steps_2.md

52 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前端重构续办说明next_steps_2
> 本文基于 `doc/frontend/next_steps.md` 的上下文,记录当前阶段的新进展、注意事项和下一步工作计划,供接力开发者参考。凡是与旧版 UI/交互存在歧义时,以 `doc/frontend/legacy_ui_spec.md` 及 `static/old_version_backup/前端备份` 目录为最终权威。
## 最新状态(相较上一版 next_steps
1. **Pinia 引入**`static/src/main.ts` 已创建 Pinia 实例;`useUiStore`/`useConversationStore` 落地,侧栏/会话列表基本信息改由 store 管理。App 通过 `mapWritableState` 读取这两个 store。
2. **组件化进展**
- `ConversationSidebar`、`LeftPanel`、`FocusPanel`、`TokenDrawer`、`PersonalizationDrawer`、`QuickMenu` 已单独成组件。
- 聊天区拆成 `ChatArea.vue`(含全部 action 块)、输入区拆成 `InputComposer.vue``App.vue` 只负责传状态/事件。
3. **兼容逻辑**
- 自动滚动、思考块滚动锁、工具卡片等逻辑仍在 `app.ts` 中,通过对新组件暴露的 `rootEl / getThinkingRef` 引用继续工作。
- Quick Menu/Settings/工具禁用/压缩对话等入口仍走原 methods只是事件链路转接到了组件。
## 待办事项
1. **Pinia Store 拆分补全**
- 参考 `doc/frontend/componentization_plan.md`,逐步迁移 `app.ts` 的数据/方法至 `useChatStore`、`useInputStore`、`useToolStore`、`useResourceStore`、`usePersonalizationStore` 等。
- 控制流程:先搬 state再迁 actions/watch最后清理 `app.ts` 中重复逻辑。
2. **聊天/动作组件细分**
- 目前的 `ChatArea` 仍包含大量内联模板可按行动类型Thinking/Text/System/Modify/Tool/Summary拆成独立子组件增强可读性与复用性。
- Markdown 渲染、工具卡片展示、thinking-scroll 等复杂逻辑建议拆到 composable`useMarkdownRenderer`、`useToolPayloadRenderer`)。
3. **输入区状态/事件整合**
-`inputMessage`、`inputLineCount`、`inputIsFocused`、`quickMenuOpen` 等迁入 store 或 composableInputComposer 只负责展示,避免 `app.ts` 持有大量 ref。
- 文件上传逻辑(`handleFileSelected`、`uploadSelectedFile`)可以移至 `useUploadStore` 或专用 composable配合 InputComposer 的事件使用。
4. **Socket/轮询拆分**
- 现有 socket 事件与轮询仍在 `app.ts`,需抽出 `useLegacySocket`、`usePolling` 等组合式函数,让各 store 订阅自己关心的事件。
5. **Overlay/Toast 组件化**
- ToastStack/ConfirmDialog/EasterEggOverlay/ContextMenu 仍在 `App.vue`,后续需转成 `AppShell` 或独立组件,并提供订阅 API。
6. **样式与测试**
- 长期目标是按模块拆分 `style.css`,但当前仍以遗留 CSS 为准。组件化完成后再考虑 Sass 模块化。
- 继续保持 `npm run build` 通过;若引入 Pinia store/composable补充单元测试/故事(可选)以防 regression。
## 推荐执行顺序
1. 完成 Input/Chat 相关 store/composable 拆分,移除 `App.vue` 的大部分 refs 和 watchers。
2. 逐步把资源/工具/子智能体等模块迁至对应 store同时将轮询/Socket 事件拆出。
3. 在 store/composable 稳定后,再处理 Overlay/Toast/EasterEgg 等全局 UI。
4. 全量对照 `static/old_version_backup/前端备份``legacy_ui_spec` 做细节校验,确保折叠/aria/title 动作一致。
## 注意事项
- 任何新逻辑都需以 `legacy_ui_spec``static/old_version_backup/前端备份` 为准确保视觉、交互、API 行为不偏离旧版。
- 操作 DOM 时尽量通过组件暴露出的 ref/composable而不是直接访问 `$refs`。拆分后应逐步删除 `app.ts` 中的 DOM 引用。
- 保持现有 API / Socket 事件名不变;若有必要增加事件,请先在文档中说明。
- 在大规模迁移前先写好过渡层store/composable避免一次性修改导致回退困难。