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
This commit is contained in:
DEV_DSW
2026-04-22 09:26:39 +08:00
parent 9b8214cdd4
commit 416399e7a8
19 changed files with 33 additions and 33 deletions

View File

@@ -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`
职责:

View File

@@ -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`

View File

@@ -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 0React 基线收口 | 已完成 | 让聊天页、任务中心、渠道入口都运行在 React 主链路 | `src/App.tsx` `src/router/index.tsx` `src/pages/Home/index.tsx` |
| Phase 1Host API 路由层重构 | 进行中 | 把本地 Provider/Gateway/Sessions/Files 从 `electron/main.ts` 中拆成独立 Host API 路由 | `electron/api/*` `electron/main.ts` |
| Phase 2OpenClaw Runtime/Packaging | 待开始 | 引入 `openclaw``uv`、runtime path 与 dev/package 双态启动能力 | `package.json` `scripts/*` `electron/utils/paths.ts` `electron/gateway/*` |
| Phase 3Gateway Lifecycle + Config Sync | 待开始 | 让 `GatewayManager` 从 in-process 过渡到 OpenClaw 进程 owner并同步 provider/agent/session 配置 | `electron/gateway/*` `electron/service/provider-api-service/*` |
| Phase 3Gateway Lifecycle + Config Sync | 待开始 | 让 `GatewayManager` 从 in-process 过渡到 OpenClaw 进程 owner并同步 provider/agent/session 配置 | `electron/gateway/*` `electron/service/provider-api-service.ts` |
| Phase 4React 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 5Agent 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
| A2zn-ai 差距映射 | 1 | 盘点当前 React/Gateway/Host API 的实际状态与缺口 | 只读分析 |
| M1Host API / Gateway Foundation | 1 | 拆本地 Host API 路由,补 Gateway info/status/health建立本地接口框架 | `electron/api/*` `electron/main.ts` `electron/gateway/manager.ts` |
| M2OpenClaw Runtime / Packaging | 1 | 迁移 `openclaw` 打包、`uv`、runtime 路径和 dev/package 启动链路 | `package.json` `scripts/*` `electron/utils/paths.ts` `electron/gateway/*` |
| M3Config Sync / Providers / Agents / Sessions | 1 | 把 provider 配置逐步收敛成 OpenClaw 可消费格式,并补本地 agent/session 接口 | `electron/service/provider-api-service/*` `electron/api/routes/*` |
| M3Config Sync / Providers / Agents / Sessions | 1 | 把 provider 配置逐步收敛成 OpenClaw 可消费格式,并补本地 agent/session 接口 | `electron/service/provider-api-service.ts` `electron/api/routes/*` |
| M4React 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` |
| M5React Chat UI / Agent Routing / Execution Graph | 1 | 接 `@agent`、thinking/tool cards、transcript 展示与执行图入口 | `src/pages/Home/*` `src/components/chat/*` |
| I1集成验收与收口 | 1 | 联调、回归、验收 checklist、发布说明 | 测试与文档 |

View File

@@ -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` | 无 |

View File

@@ -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` 通道

View File

@@ -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开发团队
**负责人**zn-ai开发团队