9.4 KiB
9.4 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]
Agent Electron Client
Fixed
- Removed legacy
guiAgent:*Unix-socket service path — desktop GUI automation now uses the standard local MCP HTTP service path (guiServer:*) only.
[0.2.0] - 2026-02-23
Agent Electron Client
Added
- 多平台打包 — uv/lanproxy 按平台准备,prepare-sdk 解决 file: 依赖符号链接问题,支持在 macOS 上打包 Windows(清理 Electron 缓存可修复 zip 报错)
- clean:electron-cache — 清理 Electron/electron-builder 缓存脚本,修复「zip: not a valid zip file」
Changed
- Vite emptyOutDir: false — 避免 renderer 构建清空 dist 导致主进程入口缺失
- prepare-uv 下载 — 使用固定文件名避免重定向 URL 过长
[0.1.x]
Changed
Agent 管理统一走 SDK
- 移除旧版 Agent spawn 方案 — 删除
agentProcess变量及agent:start/stop/status/send4 个 IPC handler(~170 行),所有 Agent 生命周期统一通过UnifiedAgentService(agentService)管理 agent:init增强 — 自动从McpProxyManager.getAgentMcpConfig()注入 MCP 配置;返回值新增engineType- 新增
agent:serviceStatusIPC — 返回{ running, engineType },替代旧版agent:status AgentConfig扩展 — 新增env(自定义环境变量)和mcpServers(MCP 服务器配置)字段OpencodeEngine.init()支持 MCP — 通过config.mcp.servers将 MCP 配置传入createOpencode()ClaudeCodeEngine.prompt()支持自定义 env — 合并config.env到 spawn 环境- ClientPage / AgentSettings / setup.ts — 全部迁移到
agent.init()/agent.destroy()/agent.serviceStatus() - preload.ts — 移除
start/stop/status/sendbridge,新增serviceStatus - electron.d.ts — 移除旧版类型,新增
serviceStatus和env/mcpServers字段
Fixed
Process Management
- Separated
agentProcessfromagentRunnerProcess—agent:start/stop/status/sendpreviously shared the sameagentRunnerProcessvariable asagentRunner:*handlers, meaning starting either service would clobber the other - Never-resolving promises in process start —
lanproxy:start,agentRunner:start,agent:startsetTimeout callbacks lacked an else branch; if the process exited within the timeout, the IPC promise would hang forever - Hard-coded ports in
agentRunner:status— Ports 60001/60002 were hard-coded instead of using the actual ports passed toagentRunner:start
Dependency Installation
- npm
--save --no-saveflag contradiction —installNpmPackage()passed both--saveand--no-saveto npm;--no-savewon, so packages weren't tracked inpackage.json, and npm 7+ auto-pruned previously-installed packages during subsequent installs. Only the last-installed package survived. packageLocator.tsusedprocess.cwd()instead ofos.homedir()— In Electron main process,process.cwd()points to the app bundle directory, not the user's home. This causedmcp.ts'sisInstalledLocally()to look for packages in the wrong directory.
Settings & Storage
settings:setstored"null"string for null values — When clearing a setting withnull, the handler insertedJSON.stringify(null)="null"into SQLite. Now usesDELETEfor null/undefined values.parseIntwithout NaN check —mcp:getPortand MCP initialization parsed port strings without validating the result, potentially passingNaNtosetPort().
MCP Service
getMcpProxyBinPathreturned system fallback instead of null — Whenmcp-proxywasn't installed locally, the method returned the bare binary name as fallback, causing theif (!binPath)guard instart()to never trigger. Now returnsnullto surface clear errors.- Shallow copy of
DEFAULT_MCP_PROXY_CONFIG— The spread operator{ ...DEFAULT_MCP_PROXY_CONFIG }only shallow-copied; the nestedmcpServersobject was shared between the default and the instance. Now uses deep copy.
UI
- Login form validation never fired —
Form.Itemhadrulesbut nonameprop, so Ant Design validation was silently skipped. Replaced with explicitmessage.warning()for each empty field.
Changed
Data Directory Unification
- Unified data directory — All data now stored under
~/.qiming-agent/- SQLite database moved from
app.getPath('userData')to~/.qiming-agent/qiming-agent.db - Dependencies service (
dependencies.ts)getAppDataDir()now returns~/.qiming-agent/ - Eliminates split between
~/Library/Application Support/...and~/.qiming-agent/
- SQLite database moved from
Bundled uv
- uv bundled into Electron — No longer requires system-wide uv installation
- uv binary shipped via
extraResources→resources/uv/bin/ - New
getResourcesPath()resolvesprocess.resourcesPath(packaged) orresources/(dev) - New
getUvBinPath()returns platform-specific bundled uv path checkUvVersion()prefers bundled uv, falls back to system uv- uv dependency type changed from
"system"to"bundled"inSETUP_REQUIRED_DEPENDENCIES - DependenciesPage shows "已集成" when bundled uv is detected
- uv binary shipped via
Dependency Environment Injection
- App-internal dependency paths injected into all child processes
- New
getAppEnv()builds env vars with~/.qiming-agent/node_modules/.bin,~/.qiming-agent/bin, andresources/uv/binprepended toPATH NODE_PATHset to~/.qiming-agent/node_modules- Applied to: file server, agent runner, lanproxy, agent, engine manager spawns
engineManager.tscreateIsolatedEnvironment()also injects app-internal paths
- New
Node.js Detection Removed
- Node.js no longer checked as system dependency — Electron bundles its own Node runtime
- DependenciesPage shows Electron built-in Node.js version with "已集成 (Electron)" status
systemDepsReadyno longer depends on Node.js check
Added
"bundled"type added toLocalDependencyTypegetResourcesPath(),getUvBinPath(),getAppEnv()exported fromdependencies.ts_checkUvBin()helper for checking a specific uv binary pathcheckUvVersion()now returnsbundledflag andbinPath- Agent Runner added to ClientPage service dashboard (4 services total)
resources/uv/bin/uv— bundled uv binary for macOS (CI/CD provides other platforms)package.jsonbuild.extraResourcesincludesresources/uv
[0.1.0] - 2026-02-22
Added
Core Architecture
- Electron Client - Cross-platform desktop application
- Multi-Agent Engine Support - Support for claude-code and qimingcode
- Session-Based Workspace - Each conversation has its own workspace
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
Services
- Setup Wizard - 3-step configuration
- Login/Logout - Authentication with SQLite storage
- File Server - Local file service
- Lanproxy - Intranet penetration
- Skills Sync - Remote skills synchronization
- IM Integration - Instant messaging
- Scheduler - Task scheduling
Changed
- Removed Zed ACP (rcoder)方案
- Removed claude-code-acp-ts dependency
- Node.js detection (built into Electron, no separate installation needed)
- Updated dependency list to match Electron architecture
Technical Details
Process Architecture
Main Process (Electron)
├── Window Management
├── IPC Handlers (40+)
├── SQLite Database
├── CoworkRunner
└── IM Gateways
Renderer Process (React)
├── UI Components
├── State Management
└── Business Logic
Directory Structure
~/.qiming-agent/
├── engines/ # Agent engines (claude-code, qimingcode)
├── workspaces/ # Session workspaces
├── node_modules/ # Local npm packages
└── qiming-agent.db # SQLite database
[Future]
Planned Features
- Sandbox execution (Alpine Linux VM)
- Permission gating
- Persistent memory
- Scheduled tasks
- IM remote control
Known Issues
- None currently
Version History
| Version | Date | Description |
|---|---|---|
| 0.1.0 | 2026-02-22 | Initial Electron client with multi-engine support |
| 0.1.1 | 2026-02-23 | Bug fixes: process separation, dependency install, settings storage |
| 0.2.0 | 2026-02-23 | Remove legacy Agent spawn, unify to SDK with MCP injection |