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:
1 parent
9b8214cdd4
commit
416399e7a8
19 files changed
+33
-33
No files matched your search
@@ -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`
|
||||
|
||||
职责:
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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、发布说明 | 测试与文档 |
|
||||
|
||||
@@ -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` | 无 |
|
||||
|
||||
@@ -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` 通道
|
||||
|
||||
|
||||
@@ -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开发团队
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user