chore: initialize qiming workspace repository

This commit is contained in:
Codex
2026-05-29 14:22:48 +08:00
commit bfd67a0f2c
10750 changed files with 1885711 additions and 0 deletions

View File

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