11 KiB
11 KiB
agent-electron-client 重构执行计划(v3)
适用范围:
/Users/apple/workspace/qiming-agent/crates/agent-electron-client基线日期:2026-03-03
1. 重构目标
本次重构以“目录与职责对齐”为核心,不改业务行为,优先解决以下问题:
main / preload / renderer边界不够清晰,preload.ts仍位于src/main/src/main/与src/renderer/顶层存在平铺文件过多的问题docs/与scripts/平铺,维护和检索成本高- 部分设置组件疑似死代码,需要在重构窗口期完成判定
同时,本轮重构明确以“开发/维护友好基座”为目标,要求后续新增需求可在不破坏边界的前提下快速接入。
2. 现状核对(与仓库一致)
已核对当前代码树,以下结论已确认:
src/main/preload.ts仍在main目录src/main/startup.ts、logConfig.ts、serviceManager.ts、trayManager.ts、autoLaunchManager.ts均在顶层src/renderer/components/和src/renderer/services/仍为平铺结构docs/与scripts/仍为平铺结构src/**/*.js编译产物目前未发现,旧计划中的“清理 src 下 js 产物”从必做项降为巡检项AgentSettings、AgentRunnerSettings、LanproxySettings、SkillsSync、IMSettings、TaskSettings当前无引用;MCPSettings被SettingsPage使用
3. 目标结构
3.1 src 重构目标
src/
main/
main.ts
db.ts
processManager.ts
bootstrap/
startup.ts
logConfig.ts
startupPorts.ts
window/
serviceManager.ts
trayManager.ts
autoLaunchManager.ts
ipc/
services/
preload/
index.ts
renderer/
components/
pages/
settings/
setup/
modals/
dev/
services/
core/
agents/
integrations/
utils/
shared/
3.2 docs / scripts 重构目标
docs/
architecture/
release/
operations/
reviews/
scripts/
prepare/
build/
tools/
4. 迁移策略(新增)
为降低大规模改路径风险,采用“兼容层迁移”:
- 文件迁移到新目录后,在旧路径保留一个短期桥接文件(
export * from 'new-path') - 全量业务 import 更新完成后,再统一删除桥接文件
- 每个 Phase 完成必须通过
npm run build,否则不进入下一阶段 - 每个 Phase 一个提交,提交信息带
refactor(phase-x): ...
5. 执行阶段(按提交拆分)
Phase 0:基线保护(先做)
- 记录当前可用命令结果:
npm run build、npm run test:run - 新增重构分支:
feature/electron-client-0.6 - 将本文件作为总入口,后续每个阶段回填“已完成/阻塞/风险”
- 基线结果(2026-03-03):
npm run build:通过npm run test:run:通过(147 tests)- 已知告警:vite chunk size > 500k、测试阶段
electron-log写系统日志路径出现 EPERM(不影响测试通过)
Phase 1:main 顶层归类(中风险,优先)
- 新建
src/main/bootstrap、src/main/window - 迁移并更新 import(先迁移再留桥接):
startup.ts、logConfig.ts、startupPorts.ts->bootstrap/serviceManager.ts、trayManager.ts、autoLaunchManager.ts->window/
- 回归验证:
npm run build:main- 主进程启动冒烟(
npm run dev:electron)
- 完成记录(2026-03-03):
- 已迁移到新目录:
src/main/bootstrap/{startup.ts,logConfig.ts}src/main/window/{serviceManager.ts,trayManager.ts,autoLaunchManager.ts}
- 已更新直接引用到新路径:
main.ts、ipc/appHandlers.ts - 已添加旧路径桥接文件(短期兼容):
src/main/startup.tssrc/main/logConfig.tssrc/main/serviceManager.tssrc/main/trayManager.tssrc/main/autoLaunchManager.ts
- 验证结果:
npm run build:main通过,npm run build通过
- 已迁移到新目录:
Phase 2:preload 提升为一级目录(中高风险)
- 移动
src/main/preload.ts->src/preload/index.ts - 更新
main.ts的 preload 产物路径 - 更新配置:
tsconfig.main.jsonincludesrc/preload/**/*tsconfig.json增加@preload/*vite.config.ts/vitest.config.ts增加@preload
- 回归验证:
npm run buildnpm run dev并确认 IPC API 可用
- 完成记录(2026-03-03):
- 已迁移:
src/main/preload.ts->src/preload/index.ts - 已更新主进程路径:
main.ts使用../preload/index.js - 已更新配置:
tsconfig.main.json、tsconfig.json、vite.config.ts、vitest.config.ts - 已添加兼容桥接:
src/main/preload.ts(转发到src/preload/index.ts) - 验证结果:
npm run build通过,npm run test:run通过
- 已迁移:
Phase 3:renderer/services 分组(中风险)
- 新建
core/agents/integrations/utils - 迁移 service 文件并维护
services/index.tsbarrel(旧路径保留桥接) - 批量修复组件中的服务 import
- 回归验证:
npm run build- 关键功能冒烟:setup、auth、mcp、agent runner、lanproxy
- 完成记录(2026-03-03):
- 已迁移到新目录:
core/{api,setup,auth,ai}.tsagents/{agentRunner,sandbox,permissions}.tsintegrations/{fileServer,lanproxy,skills,im,scheduler}.tsutils/logService.ts
- 已更新调用方路径:
App.tsx与相关组件均改为新分组路径 - 已更新
services/index.tsbarrel 到新结构 - 已添加旧路径桥接文件(短期兼容)
- 验证结果:
npm run build通过,npm run test:run通过
- 已迁移到新目录:
Phase 4:renderer/components 分组(中风险)
- 迁移 page 组件到
components/pages - 迁移 settings 组件到
components/settings - 迁移 setup 与 modal 组件到对应目录
- 批量修复 import 路径,重点关注:
App.tsxSettingsPage.tsxClientPage.tsx样式路径
- 回归验证:
npm run build:renderernpm run test:run
- 完成记录(2026-03-03):
- 已迁移到新目录:
pages/{ClientPage,SettingsPage,DependenciesPage,AboutPage,PermissionsPage,LogViewer}.tsxsettings/{MCPSettings,AgentSettings,AgentRunnerSettings,LanproxySettings,SkillsSync,IMSettings,TaskSettings}.tsxsetup/{SetupWizard,SetupDependencies}.tsxmodals/PermissionModal.tsx
- 已更新调用方路径:
App.tsx与相关组件的相对路径已全部修正 - 已添加旧路径桥接文件(短期兼容)
- 验证结果:
npm run build通过,npm run test:run通过
- 已迁移到新目录:
Phase 5:文档与脚本目录重排(低风险,后置)
- 按主题迁移
docs/*到architecture/release/operations/reviews - 按用途迁移
scripts/*到prepare/build/tools - 更新
package.jsonscripts 路径与 electron-builder 的afterSign - 回归验证:
npm run check-portsnpm run prepare:uvnpm run build
- 完成记录(2026-03-03):
- 已迁移 docs:
docs/{architecture,release,operations,reviews}分组已落地- 架构文档文件名已去掉
ARCHITECTURE-前缀
- 已迁移 scripts:
scripts/{prepare,build,tools}分组已落地
- 已更新路径引用:
package.jsonscriptspackage.json->build.afterSign- 相关 docs 与注释中的脚本路径
- 验证结果:
npm run check-ports通过npm run build通过npm run prepare:uv受当前环境网络限制失败(ENOTFOUND github.com),不属于代码回归
- 已迁移 docs:
Phase 6:死代码判定与清理(建议)
- 对无引用组件进行逐项判定(保留/删除/后续接入)
- 若删除,需同步更新文档与 release note
- 回归验证:
npm run build && npm run test:run - 完成记录(2026-03-03):
- 判定结果:
MCPSettings仍被SettingsPage使用AgentSettings、AgentRunnerSettings、LanproxySettings、SkillsSync、IMSettings、TaskSettings目前无业务引用
- 处理决策:
- 本轮不做删除,仅完成目录重构和桥接兼容;死代码清理单独作为后续行为变更任务
- 验证结果:
npm run build通过,npm run test:run通过
- 判定结果:
6. 风险与约束
preload路径改动会直接影响 Electron 启动,必须在单独阶段完成services/index.tsbarrel 重排容易引入循环依赖,需要逐步迁移并即时编译- docs/scripts 重命名后可能影响 CI 或外部脚本,需全文检索
docs/、scripts/引用 - 本次不调整业务协议、不变更 IPC contract、不触发数据库 schema 变更
7. 验收标准
满足以下条件才可视为本轮重构完成:
npm run build成功npm run test:run成功npm run dev可正常进入主界面,setup 和 settings 页面可访问dist/main/main.js启动后 preload 正常加载,window.electronAPI可用- 文档路径、脚本路径引用无失效(
rg检查无旧路径残留) - 新增功能可按分层目录直接落位(
main/preload/renderer/services/components),无需再进行目录级重排
8. 进度记录
- Phase 0 基线保护
- Phase 1 main 顶层归类
- Phase 2 preload 提升
- Phase 3 renderer/services 分组
- Phase 4 renderer/components 分组
- Phase 5 文档与脚本目录重排
- Phase 6 死代码判定与清理
9. 本次版本说明
相较 v2,本版新增了“低风险迁移机制”:
- 增加兼容层策略(迁移后短期桥接,最后统一删)
- 阶段顺序调整为先核心边界(main/preload/services),后外围目录(docs/scripts)
- 强化阶段门禁(每阶段必须可构建)
10. 基座约束(后续开发准入)
为保证后续新增需求和维护稳定性,后续提交应遵循以下约束:
- 边界约束:
- renderer 不直接依赖 main 代码;进程间只通过 IPC(
src/main/ipc+window.electronAPI) - preload 只做安全桥接,不承载业务逻辑
- renderer 不直接依赖 main 代码;进程间只通过 IPC(
- 分层约束:
- renderer 新 service 必须落到
core/agents/integrations/utils之一 - renderer 新页面组件落
components/pages,弹窗落components/modals
- renderer 新 service 必须落到
- 兼容桥接约束:
- 旧路径桥接文件仅短期存在,发布
0.6.x后统一清理 - 新代码禁止继续引用桥接文件
- 旧路径桥接文件仅短期存在,发布
- 测试与门禁:
- 变更必须通过
npm run build、npm run test:run - 影响 IPC、启动路径、权限模型的改动需补最小冒烟验证
- 变更必须通过
- 文档同步:
- 新增模块时同步更新
docs/architecture/INDEX.md(或对应主题文档)
- 新增模块时同步更新
11. 基座后续任务(建议)
建议在本轮重构后追加三项治理任务,进一步提升长期可维护性:
- 增加 lint/import 规则,禁止跨层引用与旧桥接路径引用
- 为关键 IPC handler 增加 contract tests(请求/响应 schema)
- 清理无引用 settings 组件(单独评审,避免与结构重构混改)
11.1 已落地(2026-03-03)
- 已新增
scripts/tools/check-import-boundaries.js - 已新增
npm run check:boundaries - 已新增
tests/scripts/check-import-boundaries.test.ts,覆盖:- 合法 main/renderer 分层通过
- renderer 直接引用 main 失败
- bridge 文件引用失败
- 规则覆盖:
- 禁止引用 bridge 文件(
src/main/*与src/renderer/*顶层桥接) - 禁止 renderer 直接引用 main/preload
- 禁止 main 直接引用 renderer
- 禁止引用 bridge 文件(