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:
@@ -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` - 主题相关常量
|
||||
|
||||
|
||||
Reference in New Issue
Block a user