332 lines
12 KiB
Markdown
332 lines
12 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this project will be documented in this file.
|
||
|
||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||
|
||
---
|
||
|
||
## [Unreleased]
|
||
|
||
### Added
|
||
|
||
#### 会话过滤回归测试
|
||
- **unifiedAgent.test.ts** — 新增 `listAllSessionsDetailed` 过滤非 ready 引擎的测试
|
||
- **acpEngine.test.ts** — 新增 `listSessionsDetailed` title 透传测试
|
||
|
||
### Changed
|
||
|
||
#### 会话列表过滤
|
||
- **unifiedAgent.ts** — `listAllSessionsDetailed()` 仅返回 `isReady` 为 true 的引擎会话,避免崩溃/终止的 ACP 进程污染「活跃会话」列表
|
||
|
||
#### 服务启动流程优化
|
||
- **ClientPage.tsx** — `handleStartAll` 先调用 reg 接口,返回后再 step by step 启动服务
|
||
- **ClientPage.tsx** — `handleStartServiceManual` 简化为直接启动,不调用 reg
|
||
- **ClientPage.tsx** — 服务启动失败时错误信息常驻显示在服务描述区域
|
||
|
||
#### 文档同步
|
||
- **AGENTS.md** — 更新注册同步与启动顺序章节
|
||
- **docs/REG-FLOW.md** — 新增 reg 调用流程说明文档
|
||
|
||
---
|
||
|
||
### Added (Previous)
|
||
|
||
#### 内置 Node.js 24 和 Git 集成
|
||
- **prepare-node.js** - 下载 Node.js 24 到 resources/node/
|
||
- **prepare-git.js** - 下载 PortableGit 到 resources/git/
|
||
- **内置 Node.js 24** - resources/node/bin 包含 node/npm/npx
|
||
- **内置 Git** - resources/git/bin 包含 bash.exe(Windows 必须)
|
||
- **PATH 优先级优化** - 内置 Node.js > Electron > 内置 Git > 应用内 > uv > 系统
|
||
- **Windows 环境变量优化**(参考 LobsterAI):
|
||
- 关键系统变量(SystemRoot, windir, COMSPEC, SYSTEMDRIVE)
|
||
- Windows 系统目录(System32, Wbem, PowerShell, OpenSSH)
|
||
- 注册表读取最新 PATH(解决后安装工具不在 PATH 问题)
|
||
- MSYS2_PATH_TYPE=inherit(git-bash 正确继承 PATH)
|
||
- ORIGINAL_PATH(POSIX 格式供 git-bash 使用)
|
||
- **环境变量前缀**:
|
||
- QIMINGCODE_NODE_DIR / CLAUDE_CODE_NODE_DIR
|
||
- QIMINGCODE_GIT_BASH_PATH / CLAUDE_CODE_GIT_BASH_PATH
|
||
|
||
#### 系统托盘功能
|
||
- **TrayManager** (`src/main/trayManager.ts`)
|
||
- 动态托盘图标(运行中/已停止/错误/启动中状态)
|
||
- 服务管理菜单(重启/停止服务)
|
||
- 开机自启动复选框
|
||
- 设置和依赖管理快捷入口
|
||
- IPC 状态同步(`tray:updateStatus`, `tray:updateServicesStatus`)
|
||
- **AutoLaunchManager** (`src/main/autoLaunchManager.ts`)
|
||
- 跨平台开机自启动支持
|
||
- macOS/Windows: 使用 Electron 原生 `app.setLoginItemSettings()`
|
||
- Linux: 使用 `auto-launch` 库(可选依赖)
|
||
- **ServiceManager** (`src/main/serviceManager.ts`)
|
||
- 统一的服务启停逻辑
|
||
- 供 IPC handlers 和 Tray 菜单共同使用
|
||
- 支持文件服务器、Lanproxy、Agent、MCP Proxy 管理
|
||
|
||
#### 跨平台子进程启动方案
|
||
- **spawnNoWindow 工具模块** (`src/main/services/utils/spawnNoWindow.ts`)
|
||
- 解决 Windows CMD 窗口弹出问题(使用 ELECTRON_RUN_AS_NODE=1 + windowsHide)
|
||
- 解决 macOS Dock 图标问题(使用系统 node 而非 Electron bundled Node)
|
||
- `spawnJsFile()` - 跨平台无窗口启动 JS 文件
|
||
- `spawnNpmPackage()` - 自动解析 npm 包入口并启动
|
||
- `resolveNpmPackageEntry()` - 从 package.json 解析入口文件
|
||
- `findSystemNode()` - 从用户 shell PATH 查找系统 node
|
||
- `resetCache()` - 重置内部缓存(测试用)
|
||
- **完整技术文档** (`docs/electron-spawn-no-window-solution.md`)
|
||
- 问题根因分析
|
||
- 社区方案对比
|
||
- 实现代码示例
|
||
- 测试验证步骤
|
||
|
||
### Fixed
|
||
|
||
#### 手动启动单个服务时补充 reg 同步
|
||
- **ClientPage.tsx** - 新增 `handleStartServiceManual` 包装函数,用户点击单个服务「启动」按钮时先调用 `syncConfigToServer()`(即 `/api/sandbox/config/reg`)获取最新的 `serverHost`/`serverPort`,再启动目标服务
|
||
- 此前仅「登录」和「启动全部」会在启动服务前调用 reg,手动启动单个服务(特别是 lanproxy)可能使用过期的后端配置
|
||
- 三种启动场景(登录/启动全部/手动单个)现在均保证 reg 在服务启动之前完成
|
||
|
||
#### Lanproxy 切换账号后会话显示客户端离线
|
||
- **processHandlers.ts** - `startLanproxyProcess` 在 lanproxy 已运行时先停止旧进程再用本次传入的新 config(含新 clientKey/serverIp/serverPort)重启,而非直接跳过
|
||
- **processManager.ts** - 新增 `stopAsync()` 方法,发送 SIGTERM 并等待进程退出(5s 超时后 SIGKILL),确保端口/资源释放后再重启;含 stdio 监听器清理防止 Windows 句柄泄漏
|
||
- 覆盖场景:不退出登录直接切换账号 / 退出后用新账号登录 / 任何路径调用 `lanproxy:start`
|
||
|
||
### Changed
|
||
|
||
#### 子进程启动重构
|
||
- **mcp.ts** - 使用 `spawnJsFile` 和 `resolveNpmPackageEntry` 替代原有 spawn
|
||
- **engineManager.ts** - 使用 `spawnJsFile` 和 `resolveNpmPackageEntry` 启动引擎
|
||
- **acpClient.ts** - 使用 `spawnJsFile` 和 `resolveNpmPackageEntry` 启动 ACP 进程
|
||
|
||
---
|
||
|
||
## [0.2.0] - 2026-02-23
|
||
|
||
### Added
|
||
|
||
#### 多平台打包与构建
|
||
- **uv 多平台集成** — `scripts/prepare-uv.js` 按当前平台从 `resources/uv/<platform-arch>/` 复制或从 GitHub Release 下载最新 uv,支持 darwin/win32/linux 的 x64 与 arm64
|
||
- **lanproxy 多平台** — `scripts/prepare-lanproxy.js` 从 Tauri binaries 按平台准备 qiming-lanproxy
|
||
- **prepare-sdk** — `scripts/prepare-sdk.js` 打包前将 `vendors/qimingcode-sdk` 复制到 `node_modules/@qiming-ai/sdk`,避免 electron-builder 因 file: 符号链接报错
|
||
- **clean:electron-cache** — `npm run clean:electron-cache` 与 `scripts/clean-electron-cache.js`,用于修复「zip: not a valid zip file」等缓存损坏问题
|
||
- **release/** 加入 .gitignore,忽略打包产物
|
||
|
||
### Changed
|
||
|
||
#### 构建与打包
|
||
- **Vite emptyOutDir: false** — 保留主进程 `dist/main/` 输出,避免 renderer 构建清空导致入口缺失
|
||
- **prepare-uv 下载文件名** — 使用 `preferredFilename` 避免重定向后 URL 过长导致 ENAMETOOLONG
|
||
- **AGENTS.md** — 增加「在 macOS 上打 Windows 包」与 zip 报错处理说明
|
||
|
||
#### SDK Migration
|
||
- **Rename vendors/opencode-sdk to vendors/qimingcode-sdk**
|
||
- **Upgrade @qiming-ai/sdk to v1.2.10** (based on @opencode-ai/sdk v1.2.10)
|
||
- Full API surface: 22 session methods, SSE events, tools, permissions, files
|
||
- Pre-compiled dist from @opencode-ai/sdk
|
||
|
||
#### Unified Agent Service Rewrite
|
||
- **Complete rewrite of `unifiedAgent.ts`** with full SDK integration
|
||
- `OpencodeEngine`: 30+ methods covering sessions, messages, prompt/promptAsync, permissions, tools, files, providers, MCP, agents, commands
|
||
- `ClaudeCodeEngine`: CLI wrapper (claude --print --output-format json)
|
||
- `UnifiedAgentService`: Event bus + engine proxy pattern
|
||
- SSE event stream with auto-reconnect for real-time updates
|
||
- Type-safe imports from @qiming-ai/sdk
|
||
|
||
#### IPC Layer Enhancement
|
||
- **30 new IPC handlers** in main.ts for SDK operations
|
||
- Session CRUD: listSessions, createSession, getSession, deleteSession, updateSession
|
||
- Messages: getMessages, getMessage
|
||
- Prompt/Command: prompt, promptAsync, command, shell
|
||
- Permissions: respondPermission
|
||
- Session ops: abort, revert, unrevert, shareSession, forkSession, getSessionDiff
|
||
- Tools/Providers: listTools, listProviders, getConfig
|
||
- Files: findText, findFiles, listFiles, readFile
|
||
- MCP/Agents: mcpStatus, listAgents, listCommands
|
||
- **SSE event forwarding** from main process to renderer via `agent:event` channel
|
||
- **Updated preload.ts** with complete agent API surface
|
||
- **Updated electron.d.ts** with AgentAPI type definitions
|
||
|
||
---
|
||
|
||
## [0.1.0] - 2026-02-22
|
||
|
||
### Added
|
||
|
||
#### Core Architecture
|
||
- **QimingClaw** - Cross-platform desktop application
|
||
- **Multi-Agent Engine Support** - Support for claude-code and qimingcode
|
||
- **Session-Based Workspace** - Each conversation has its own workspace
|
||
|
||
#### Agent Service
|
||
- **Unified Agent Service** (`unifiedAgent.ts`)
|
||
- Unified SDK layer for all agent engines
|
||
- Opencode/QimingCode support via @qiming-ai/sdk (vendors/qimingcode-sdk)
|
||
- Claude Code support via CLI (sACP mode)
|
||
- Consistent API for session management, chat, command execution
|
||
|
||
#### SDK
|
||
- **@qiming-ai/sdk** (vendors/qimingcode-sdk)
|
||
- 基于 @opencode-ai/sdk v1.2.10 的完整 SDK
|
||
- Auto-start server process
|
||
- HTTP API support for both engines
|
||
|
||
#### Agent Engine Management
|
||
- **Engine Manager** (`engineManager.ts`)
|
||
- Local installation of engines
|
||
- Environment variable isolation
|
||
- Configuration isolation
|
||
- HOME/XDG_CONFIG_HOME redirection
|
||
|
||
- **Shell Environment** (`shellEnv.ts`)
|
||
- Cross-platform support (Windows/macOS/Linux)
|
||
- Shell detection (zsh/bash/PowerShell)
|
||
- Essential tool detection
|
||
- PATH management
|
||
|
||
- **Workspace Manager** (`workspaceManager.ts`)
|
||
- User-specified workspace directories
|
||
- Workspace validation
|
||
- Configuration persistence
|
||
|
||
#### Dependency Management
|
||
- **Dependencies Service** (`dependencies.ts`)
|
||
- Local npm package management
|
||
- Version detection
|
||
- Required dependencies:
|
||
- uv (Python package manager)
|
||
- qiming-file-server (File service)
|
||
- qimingcode (Agent engine)
|
||
|
||
#### MCP Management
|
||
- **MCP Service** (`mcp.ts`)
|
||
- Local installation (isolated from system)
|
||
- Version detection
|
||
- Package location tracking
|
||
|
||
#### Sandbox Execution
|
||
- **Sandbox Manager** (`sandbox.ts`)
|
||
- Cross-platform sandbox support
|
||
- Docker containers (all platforms)
|
||
- WSL (Windows)
|
||
- Firejail (Linux)
|
||
- macOS App Sandbox
|
||
|
||
#### Permission System
|
||
- **Permissions Service** (`permissions.ts`)
|
||
- Rule-based permission management
|
||
- Pattern matching (wildcards)
|
||
- Session-level approval
|
||
- Config persistence
|
||
- Import/export config
|
||
|
||
#### Logging
|
||
- **Log Service** (`logService.ts`)
|
||
- Log levels: error, warning, success, info
|
||
- Filtering and search
|
||
- Statistics
|
||
- Export (JSON/CSV/TXT)
|
||
- Real-time subscription
|
||
- Integration with electron-log
|
||
- Persistent storage
|
||
|
||
#### Platform Compatibility
|
||
- **Windows Fix**: Add `windowsHide: true` to prevent cmd popup
|
||
- **Process Cleanup**: Proper cleanup on app quit
|
||
- **Zombie Prevention**: Kill all child processes on exit
|
||
|
||
#### Services (18 total)
|
||
- setup.ts - Setup wizard and auth
|
||
- agent.ts - Agent management
|
||
- agentRunner.ts - Agent runner
|
||
- ai.ts - AI configuration
|
||
- dependencies.ts - Dependency management
|
||
- engineManager.ts - Engine management
|
||
- dependencies.ts - Dependency management
|
||
- engineManager.ts - Engine management
|
||
- fileServer.ts - File server
|
||
- im.ts - Instant messaging
|
||
- lanproxy.ts - Intranet penetration
|
||
- logService.ts - Logging
|
||
- mcp.ts - MCP management
|
||
- packageLocator.ts - Package detection
|
||
- packageManager.ts - Package management
|
||
- permissions.ts - Permissions
|
||
- sandbox.ts - Sandbox execution
|
||
- scheduler.ts - Task scheduling
|
||
- setup.ts - Setup wizard
|
||
- shellEnv.ts - Shell environment
|
||
- skills.ts - Skills sync
|
||
- workspaceManager.ts - Workspace management
|
||
|
||
#### Components (10 total)
|
||
- AgentRunnerSettings.tsx
|
||
- AgentSettings.tsx
|
||
- IMSettings.tsx
|
||
- LanproxySettings.tsx
|
||
- MCPSettings.tsx
|
||
- PermissionModal.tsx
|
||
- SettingsPage.tsx
|
||
- SetupWizard.tsx
|
||
- SkillsSync.tsx
|
||
- TaskSettings.tsx
|
||
|
||
### Fixed
|
||
- Windows cmd popup issue when running as service
|
||
- Process cleanup on app quit
|
||
- Zombie process prevention
|
||
- Port conflict prevention
|
||
|
||
### Changed
|
||
- Removed Zed ACP (rcoder)方案
|
||
- Removed claude-code-acp-ts dependency
|
||
- Updated dependency list to match Electron architecture
|
||
|
||
### Technical Details
|
||
|
||
#### Process Architecture
|
||
```
|
||
Main Process (Electron)
|
||
├── Window Management
|
||
├── IPC Handlers (40+)
|
||
├── SQLite Database
|
||
├── System Tray
|
||
└── Process Cleanup on Exit
|
||
|
||
Renderer Process (React)
|
||
├── UI Components
|
||
├── State Management
|
||
└── Business Logic
|
||
```
|
||
|
||
#### Directory Structure
|
||
```
|
||
~/.qimingbot/
|
||
├── engines/ # Agent engines (claude-code, qimingcode)
|
||
├── workspaces/ # Session workspaces
|
||
├── node_modules/ # Local npm packages
|
||
│ └── mcp-servers # MCP servers (isolated)
|
||
├── logs/ # Application logs
|
||
└── qimingbot.db # SQLite database
|
||
```
|
||
|
||
---
|
||
|
||
## [Future]
|
||
|
||
### Planned Features
|
||
- [ ] Built-in Skills (16 types like LobsterAI)
|
||
- [ ] Persistent Memory
|
||
- [ ] Auto-launch on startup
|
||
|
||
### Known Issues
|
||
- None currently
|
||
|
||
---
|
||
|
||
## Version History
|
||
|
||
| Version | Date | Description |
|
||
|---------|------|-------------|
|
||
| 0.1.0 | 2026-02-22 | Initial Electron client with multi-engine support |
|