12 KiB
12 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
会话过滤回归测试
- unifiedAgent.test.ts — 新增
listAllSessionsDetailed过滤非 ready 引擎的测试 - acpEngine.test.ts — 新增
listSessionsDetailedtitle 透传测试
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 查找系统 noderesetCache()- 重置内部缓存(测试用)
- 完整技术文档 (
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.tswith full SDK integrationOpencodeEngine: 30+ methods covering sessions, messages, prompt/promptAsync, permissions, tools, files, providers, MCP, agents, commandsClaudeCodeEngine: 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:eventchannel - 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: trueto 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 |