From 416399e7a81d628a8484545676e4d6667e65a08c Mon Sep 17 00:00:00 2001 From: DEV_DSW <562304744@qq.com> Date: Wed, 22 Apr 2026 09:26:39 +0800 Subject: [PATCH] feat: implement menu service for context menu management feat: add provider API service for managing provider accounts and keys feat: create provider runtime sync service for agent runtime management feat: introduce script execution service for running automation scripts feat: develop script store service for managing script metadata and storage feat: implement theme service for managing application theme settings feat: add updater service for handling application updates feat: create window service for managing application windows and their states --- docs/Gateway-Configuration-Migration-Plan.md | 12 +++++------ docs/Launch-At-Startup-Migration-Plan.md | 20 +++++++++---------- docs/OpenClaw-Chat-Alignment-Plan.md | 6 +++--- docs/TaskList-Implementation-Plan.md | 8 ++++---- docs/model-chat-migration-plan.md | 4 ++-- docs/theme-implementation-reference.md | 16 +++++++-------- .../index.ts => config-service.ts} | 0 .../index.ts => execute-script-service.ts} | 0 electron/service/{ipc/index.ts => ipc.ts} | 0 .../index.ts => launch-at-startup.ts} | 0 .../service/{logger/index.ts => logger.ts} | 0 .../index.ts => menu-service.ts} | 0 .../index.ts => provider-api-service.ts} | 0 .../index.ts => provider-runtime-sync.ts} | 0 .../index.ts => script-execution-service.ts} | 0 .../index.ts => script-store-service.ts} | 0 .../index.ts => theme-service.ts} | 0 .../service/{updater/index.ts => updater.ts} | 0 .../index.ts => window-service.ts} | 0 19 files changed, 33 insertions(+), 33 deletions(-) rename electron/service/{config-service/index.ts => config-service.ts} (100%) rename electron/service/{execute-script-service/index.ts => execute-script-service.ts} (100%) rename electron/service/{ipc/index.ts => ipc.ts} (100%) rename electron/service/{launch-at-startup/index.ts => launch-at-startup.ts} (100%) rename electron/service/{logger/index.ts => logger.ts} (100%) rename electron/service/{menu-service/index.ts => menu-service.ts} (100%) rename electron/service/{provider-api-service/index.ts => provider-api-service.ts} (100%) rename electron/service/{provider-runtime-sync/index.ts => provider-runtime-sync.ts} (100%) rename electron/service/{script-execution-service/index.ts => script-execution-service.ts} (100%) rename electron/service/{script-store-service/index.ts => script-store-service.ts} (100%) rename electron/service/{theme-service/index.ts => theme-service.ts} (100%) rename electron/service/{updater/index.ts => updater.ts} (100%) rename electron/service/{window-service/index.ts => window-service.ts} (100%) diff --git a/docs/Gateway-Configuration-Migration-Plan.md b/docs/Gateway-Configuration-Migration-Plan.md index 97029d1..d0a9d53 100644 --- a/docs/Gateway-Configuration-Migration-Plan.md +++ b/docs/Gateway-Configuration-Migration-Plan.md @@ -63,8 +63,8 @@ - 设置页容器:`src/pages/Setting/index.tsx` - 通用设置面板:`src/pages/Setting/components/GeneralSettingsPanel.tsx` - 全局设置 store:`src/stores/settings.ts` -- 配置持久化:`electron/service/config-service/index.ts` -- 主题服务:`electron/service/theme-service/index.ts` +- 配置持久化:`electron/service/config-service.ts` +- 主题服务:`electron/service/theme-service.ts` - 更新服务:`src/pages/Setting/useSettingUpdateState.ts` - Gateway Host API: - `GET /api/gateway/status` @@ -85,7 +85,7 @@ 3. `src/types/runtime.ts` 和 `ConfigValueMap` 没有网关相关 key。 4. `config-service` 默认配置里没有网关设置默认值。 5. `electron/api/router.ts` 没有 `/api/settings` 与 `/api/logs` 这类本地设置/日志路由。 -6. `electron/service/logger/index.ts` 负责写日志,但没有对 renderer 暴露“读取最近日志 / 获取日志目录”的能力。 +6. `electron/service/logger.ts` 负责写日志,但没有对 renderer 暴露“读取最近日志 / 获取日志目录”的能力。 7. `electron/preload/index.ts` 目前也没有 `showItemInFolder` 之类 shell 能力。 8. `zn-ai/electron/gateway/manager.ts` 当前更像 in-process bridge,状态维度只有 `connected|disconnected|reconnecting`,没有 `ClawX` 那种 `running|starting|stopped|error + port + pid` 的完整生命周期视图。 @@ -215,7 +215,7 @@ 需要修改: -- `electron/service/config-service/index.ts` +- `electron/service/config-service.ts` - `src/types/runtime.ts` - `runtime-shared/lib/constants.ts` @@ -374,8 +374,8 @@ - `electron/api/router.ts` - 新增 `electron/api/routes/settings.ts` - 新增 `electron/api/routes/logs.ts` -- `electron/service/config-service/index.ts` -- `electron/service/logger/index.ts` +- `electron/service/config-service.ts` +- `electron/service/logger.ts` - `electron/preload/index.ts` 职责: diff --git a/docs/Launch-At-Startup-Migration-Plan.md b/docs/Launch-At-Startup-Migration-Plan.md index c785871..9e83422 100644 --- a/docs/Launch-At-Startup-Migration-Plan.md +++ b/docs/Launch-At-Startup-Migration-Plan.md @@ -111,7 +111,7 @@ - 设置页容器:`zn-ai/src/pages/Setting/index.tsx` - 自定义开关组件:`zn-ai/src/pages/Setting/components/ToggleSwitch.tsx` - 全局设置 store:`zn-ai/src/stores/settings.ts` -- 配置持久化:`zn-ai/electron/service/config-service/index.ts` +- 配置持久化:`zn-ai/electron/service/config-service.ts` - 通用设置本地路由:`zn-ai/electron/api/routes/settings.ts` - 主进程初始化入口:`zn-ai/electron/main.ts` @@ -128,14 +128,14 @@ - `zn-ai/src/stores/settings.ts` 3. `config-service` 默认配置里没有 `launchAtStartup` - - `zn-ai/electron/service/config-service/index.ts` + - `zn-ai/electron/service/config-service.ts` 4. 主进程没有 OS 级开机自启动服务 - `zn-ai/electron` 下目前不存在 `launch-at-startup` 模块 5. `zn-ai` 的设置主写路径不是 Host API,而是 `SET_CONFIG` IPC - `zn-ai/src/stores/settings.ts` - - `zn-ai/electron/service/config-service/index.ts` + - `zn-ai/electron/service/config-service.ts` 这意味着: @@ -222,7 +222,7 @@ - `zn-ai/runtime-shared/lib/constants.ts` - `zn-ai/runtime-shared/lib/types.ts` - `zn-ai/src/types/runtime.ts` -- `zn-ai/electron/service/config-service/index.ts` +- `zn-ai/electron/service/config-service.ts` 建议新增 key: @@ -241,7 +241,7 @@ 建议新增模块: -- `zn-ai/electron/service/launch-at-startup/index.ts` +- `zn-ai/electron/service/launch-at-startup.ts` 职责直接对齐 `ClawX`,但把应用标识替换为 `zn-ai` 当前产品信息: @@ -264,7 +264,7 @@ 因为 `zn-ai` 当前 renderer 主要通过 `SET_CONFIG` IPC 写设置,所以副作用至少要覆盖两条路径: 1. `SET_CONFIG` / `UPDATE_CONFIG` - - 位置:`zn-ai/electron/service/config-service/index.ts` + - 位置:`zn-ai/electron/service/config-service.ts` - 当 key 或 patch 触达 `launchAtStartup` 时,调用 `applyLaunchAtStartupSetting(...)` 2. 应用启动回放 @@ -293,8 +293,8 @@ ### 6.3 主进程 -- `zn-ai/electron/service/config-service/index.ts` -- `zn-ai/electron/service/launch-at-startup/index.ts`(新增) +- `zn-ai/electron/service/config-service.ts` +- `zn-ai/electron/service/launch-at-startup.ts`(新增) - `zn-ai/electron/api/routes/settings.ts` - `zn-ai/electron/main.ts` @@ -437,8 +437,8 @@ 负责文件: -- `zn-ai/electron/service/launch-at-startup/index.ts` -- `zn-ai/electron/service/config-service/index.ts` +- `zn-ai/electron/service/launch-at-startup.ts` +- `zn-ai/electron/service/config-service.ts` - `zn-ai/electron/api/routes/settings.ts` - `zn-ai/electron/main.ts` - `zn-ai/tests/launch-at-startup.test.ts` diff --git a/docs/OpenClaw-Chat-Alignment-Plan.md b/docs/OpenClaw-Chat-Alignment-Plan.md index 92767dc..74ba701 100644 --- a/docs/OpenClaw-Chat-Alignment-Plan.md +++ b/docs/OpenClaw-Chat-Alignment-Plan.md @@ -29,7 +29,7 @@ | gateway:rpc / gateway:event | 已可用 | `electron/gateway/manager.ts` `src/lib/gateway-client.ts` | | hostApiFetch | 已可用 | `src/lib/host-api.ts` `electron/main.ts` | | Transcript 写入 | 已有 jsonl 写入 | `electron/gateway/handlers/chat.ts` `electron/utils/token-usage-writer.ts` | -| Provider 本地化 | 已可用 | `electron/service/provider-api-service/index.ts` | +| Provider 本地化 | 已可用 | `electron/service/provider-api-service.ts` | | 本地 Session Key | 已初步收敛到 `agent:*` | `src/stores/chat.ts` | ### 2.3 仍未对齐 ClawX 的关键差距 @@ -103,7 +103,7 @@ OpenClaw Gateway | Phase 0:React 基线收口 | 已完成 | 让聊天页、任务中心、渠道入口都运行在 React 主链路 | `src/App.tsx` `src/router/index.tsx` `src/pages/Home/index.tsx` | | Phase 1:Host API 路由层重构 | 进行中 | 把本地 Provider/Gateway/Sessions/Files 从 `electron/main.ts` 中拆成独立 Host API 路由 | `electron/api/*` `electron/main.ts` | | Phase 2:OpenClaw Runtime/Packaging | 待开始 | 引入 `openclaw`、`uv`、runtime path 与 dev/package 双态启动能力 | `package.json` `scripts/*` `electron/utils/paths.ts` `electron/gateway/*` | -| Phase 3:Gateway Lifecycle + Config Sync | 待开始 | 让 `GatewayManager` 从 in-process 过渡到 OpenClaw 进程 owner,并同步 provider/agent/session 配置 | `electron/gateway/*` `electron/service/provider-api-service/*` | +| Phase 3:Gateway Lifecycle + Config Sync | 待开始 | 让 `GatewayManager` 从 in-process 过渡到 OpenClaw 进程 owner,并同步 provider/agent/session 配置 | `electron/gateway/*` `electron/service/provider-api-service.ts` | | Phase 4:React Chat Store 对齐 | 待开始 | 让 React Chat Store 对齐 ClawX 的 session/history/send/abort/transcript 契约 | `src/stores/chat.ts` `src/lib/host-api.ts` `src/lib/gateway-client.ts` | | Phase 5:Agent Routing + Execution Graph | 待开始 | 接入 `@agent` 主会话映射、transcript 读取、执行图和子任务展示 | `src/pages/Home/*` `src/components/chat/*` `electron/api/routes/sessions.ts` | | Phase 6:验收与收口 | 待开始 | 做 E2E 与回归,清理过渡实现,准备进入 OpenClaw 主架构 | 文档、测试、构建脚本 | @@ -163,7 +163,7 @@ OpenClaw Gateway | A2:zn-ai 差距映射 | 1 | 盘点当前 React/Gateway/Host API 的实际状态与缺口 | 只读分析 | | M1:Host API / Gateway Foundation | 1 | 拆本地 Host API 路由,补 Gateway info/status/health,建立本地接口框架 | `electron/api/*` `electron/main.ts` `electron/gateway/manager.ts` | | M2:OpenClaw Runtime / Packaging | 1 | 迁移 `openclaw` 打包、`uv`、runtime 路径和 dev/package 启动链路 | `package.json` `scripts/*` `electron/utils/paths.ts` `electron/gateway/*` | -| M3:Config Sync / Providers / Agents / Sessions | 1 | 把 provider 配置逐步收敛成 OpenClaw 可消费格式,并补本地 agent/session 接口 | `electron/service/provider-api-service/*` `electron/api/routes/*` | +| M3:Config Sync / Providers / Agents / Sessions | 1 | 把 provider 配置逐步收敛成 OpenClaw 可消费格式,并补本地 agent/session 接口 | `electron/service/provider-api-service.ts` `electron/api/routes/*` | | M4:React Chat Store / History / Send | 1 | 对齐 `chat.send/history/abort/session.list` 与 transcript fallback | `src/stores/chat.ts` `src/lib/host-api.ts` `src/lib/gateway-client.ts` | | M5:React Chat UI / Agent Routing / Execution Graph | 1 | 接 `@agent`、thinking/tool cards、transcript 展示与执行图入口 | `src/pages/Home/*` `src/components/chat/*` | | I1:集成验收与收口 | 1 | 联调、回归、验收 checklist、发布说明 | 测试与文档 | diff --git a/docs/TaskList-Implementation-Plan.md b/docs/TaskList-Implementation-Plan.md index d3e04e6..18379b7 100644 --- a/docs/TaskList-Implementation-Plan.md +++ b/docs/TaskList-Implementation-Plan.md @@ -8,7 +8,7 @@ | 模块 | 当前状态 | 关键文件 | |---|---|---| -| 脚本执行 | 通过 `utilityProcess.fork` 串行执行,**阻塞式返回结果**,无实时推送 | `electron/service/execute-script-service/index.ts` | +| 脚本执行 | 通过 `utilityProcess.fork` 串行执行,**阻塞式返回结果**,无实时推送 | `electron/service/execute-script-service.ts` | | 任务列表 UI | 使用 `@constant/task` **静态假数据** | `src/pages/home/components/TaskList.vue`、`TaskCard.vue` | | 脚本触发入口 | `TaskOperationDialog.vue` 中调用 `window.api.executeScript(options)` | `src/pages/home/components/TaskOperationDialog.vue` | | 状态管理 | 已有 `store/script.ts` 管理脚本元数据,**缺少任务(Task)生命周期管理** | `src/store/script.ts` | @@ -116,7 +116,7 @@ interface Task { ### Phase 2:主进程进度推送改造 **目标**:让脚本执行过程可被渲染层实时感知。 -5. **`electron/service/execute-script-service/index.ts`**(修改) +5. **`electron/service/execute-script-service.ts`**(修改) - 继承 `EventEmitter`,新增事件: - `progress`:解析到 `__ZN_PROGRESS__` 前缀时触发 - `stdout`:有新的标准输出时触发 @@ -282,7 +282,7 @@ List.vue 调用 taskStore.retryFailedSubTasks(taskId) | `src/lib/constants.ts` | 新增 `TASK_PROGRESS` 等 IPC 常量 | | `electron/preload/index.ts` | 暴露 `onTaskProgress` 等监听 API | | `global.d.ts` | 更新 `WindowApi` 类型 | -| `electron/service/execute-script-service/index.ts` | 解析进度并 emit 事件 | +| `electron/service/execute-script-service.ts` | 解析进度并 emit 事件 | | `electron/process/runTaskOperationService.ts` | 绑定 taskId 并推送 IPC | | `src/pages/home/components/TaskList.vue` | 接入真实数据、tab 过滤、日期时间动态化 | | `src/pages/home/components/TaskCard.vue` | 动态状态、进度、操作按钮 | @@ -317,7 +317,7 @@ List.vue 调用 taskStore.retryFailedSubTasks(taskId) | Sub-agent | 负责阶段 | 关键文件 | 依赖 | |---|---|---|---| -| **SA-1 主进程** | Phase 1 + Phase 2 | `src/lib/task-types.ts`、`src/lib/constants.ts`、`electron/preload/index.ts`、`global.d.ts`、`electron/service/execute-script-service/index.ts`、`electron/process/runTaskOperationService.ts` | 无 | +| **SA-1 主进程** | Phase 1 + Phase 2 | `src/lib/task-types.ts`、`src/lib/constants.ts`、`electron/preload/index.ts`、`global.d.ts`、`electron/service/execute-script-service.ts`、`electron/process/runTaskOperationService.ts` | 无 | | **SA-2 状态管理** | Phase 3 | `src-react/stores/task.ts`(状态与 IPC 订阅)、`src-react/pages/Home/index.tsx`(触发初始化) | 需 SA-1 的类型与 IPC 契约 | | **SA-3 前端 UI** | Phase 4 + Phase 5 | `src-react/components/chat/TaskBoard.tsx`、`src-react/pages/Home/components/TaskOperationDialog.tsx` | 需 SA-2 的 Store API(可按本计划接口契约先行开发) | | **SA-4 脚本进度** | Phase 6 | `electron/scripts/mt_trace.js`、`fg_trace.js`、`dy_hotel_trace.js`、`dy_hot_spring_trace.js` | 无 | diff --git a/docs/model-chat-migration-plan.md b/docs/model-chat-migration-plan.md index 09e7e3a..585363f 100644 --- a/docs/model-chat-migration-plan.md +++ b/docs/model-chat-migration-plan.md @@ -587,7 +587,7 @@ contextBridge.exposeInMainWorld('api', { ### Phase 7: Provider 配置变更与 Gateway 热重载 #### 4.7.1 Provider 变更通知机制 -在 `electron/service/provider-api-service/index.ts` 中引入订阅模式: +在 `electron/service/provider-api-service.ts` 中引入订阅模式: ```ts type ProviderChangeListener = () => void; const listeners: ProviderChangeListener[] = []; @@ -717,7 +717,7 @@ onProviderChange(() => { - `electron/main.ts` — 注册 `gateway:rpc` IPC,初始化 `GatewayManager` - `electron/providers/index.ts` — 废弃旧配置读取,改为从 `providerApiService` 读取 - `electron/providers/OpenAIProvider.ts` — 扩展 headers、AbortSignal 支持 -- `electron/service/provider-api-service/index.ts` — 增加变更通知机制 +- `electron/service/provider-api-service.ts` — 增加变更通知机制 - `electron/wins/index.ts` — 废弃 `START_A_DIALOGUE` IPC Handler - `electron/preload/index.ts` — 确保暴露 `gateway:event` 通道 diff --git a/docs/theme-implementation-reference.md b/docs/theme-implementation-reference.md index 9d707d6..bddd3f8 100644 --- a/docs/theme-implementation-reference.md +++ b/docs/theme-implementation-reference.md @@ -242,8 +242,8 @@ CSS变量和Tailwind样式自动应用新主题 #### 1.1 核心组件 | 组件 | 文件路径 | 功能描述 | |------|----------|---------| -| **主题服务** | `electron/service/theme-service/index.ts` | 主题切换服务,处理IPC通信 | -| **配置服务** | `electron/service/config-service/index.ts` | 配置存储管理,使用config.json文件 | +| **主题服务** | `electron/service/theme-service.ts` | 主题切换服务,处理IPC通信 | +| **配置服务** | `electron/service/config-service.ts` | 配置存储管理,使用config.json文件 | | **CSS变量系统** | `src/styles/theme/` | 包含light.css、dark.css、index.css | | **主题常量** | `src/lib/constants.ts` | 定义CONFIG_KEYS.THEME_MODE等常量 | | **样式入口** | `src/styles/index.css` | 导入主题样式 | @@ -317,8 +317,8 @@ zn-ai主题系统架构 │ ├── Tailwind配置 (tailwind.config.js) │ └── 全局样式 (styles/index.css) ├── 服务层 -│ ├── 主题服务增强 (electron/service/theme-service/) -│ ├── 配置服务集成 (electron/service/config-service/) +│ ├── 主题服务增强 (electron/service/theme-service.ts) +│ ├── 配置服务集成 (electron/service/config-service.ts) │ └── IPC通信优化 └── 持久化层 ├── 配置文件 (userData/config.json) @@ -489,7 +489,7 @@ module.exports = { #### 3.5 主题服务增强 ```typescript -// electron/service/theme-service/index.ts 增强 +// electron/service/theme-service.ts 增强 import { ipcMain, BrowserWindow } from 'electron'; import { IPC_EVENTS, CONFIG_KEYS } from '@lib/constants'; import { ConfigService } from '../config-service'; @@ -672,8 +672,8 @@ export class ThemeService { - `electron/api/routes/settings.ts` - 主进程API ### 2. zn-ai现有文件 -- `electron/service/theme-service/index.ts` - 现有主题服务 -- `electron/service/config-service/index.ts` - 配置服务 +- `electron/service/theme-service.ts` - 现有主题服务 +- `electron/service/config-service.ts` - 配置服务 - `src/styles/theme/` - 现有CSS变量 - `src/lib/constants.ts` - 主题相关常量 @@ -694,4 +694,4 @@ export class ThemeService { **文档版本**:v1.0 **创建时间**:2026-04-08 **最后更新**:2026-04-08 -**负责人**:zn-ai开发团队 \ No newline at end of file +**负责人**:zn-ai开发团队 diff --git a/electron/service/config-service/index.ts b/electron/service/config-service.ts similarity index 100% rename from electron/service/config-service/index.ts rename to electron/service/config-service.ts diff --git a/electron/service/execute-script-service/index.ts b/electron/service/execute-script-service.ts similarity index 100% rename from electron/service/execute-script-service/index.ts rename to electron/service/execute-script-service.ts diff --git a/electron/service/ipc/index.ts b/electron/service/ipc.ts similarity index 100% rename from electron/service/ipc/index.ts rename to electron/service/ipc.ts diff --git a/electron/service/launch-at-startup/index.ts b/electron/service/launch-at-startup.ts similarity index 100% rename from electron/service/launch-at-startup/index.ts rename to electron/service/launch-at-startup.ts diff --git a/electron/service/logger/index.ts b/electron/service/logger.ts similarity index 100% rename from electron/service/logger/index.ts rename to electron/service/logger.ts diff --git a/electron/service/menu-service/index.ts b/electron/service/menu-service.ts similarity index 100% rename from electron/service/menu-service/index.ts rename to electron/service/menu-service.ts diff --git a/electron/service/provider-api-service/index.ts b/electron/service/provider-api-service.ts similarity index 100% rename from electron/service/provider-api-service/index.ts rename to electron/service/provider-api-service.ts diff --git a/electron/service/provider-runtime-sync/index.ts b/electron/service/provider-runtime-sync.ts similarity index 100% rename from electron/service/provider-runtime-sync/index.ts rename to electron/service/provider-runtime-sync.ts diff --git a/electron/service/script-execution-service/index.ts b/electron/service/script-execution-service.ts similarity index 100% rename from electron/service/script-execution-service/index.ts rename to electron/service/script-execution-service.ts diff --git a/electron/service/script-store-service/index.ts b/electron/service/script-store-service.ts similarity index 100% rename from electron/service/script-store-service/index.ts rename to electron/service/script-store-service.ts diff --git a/electron/service/theme-service/index.ts b/electron/service/theme-service.ts similarity index 100% rename from electron/service/theme-service/index.ts rename to electron/service/theme-service.ts diff --git a/electron/service/updater/index.ts b/electron/service/updater.ts similarity index 100% rename from electron/service/updater/index.ts rename to electron/service/updater.ts diff --git a/electron/service/window-service/index.ts b/electron/service/window-service.ts similarity index 100% rename from electron/service/window-service/index.ts rename to electron/service/window-service.ts