Files
qiming/qimingclaw/crates/agent-electron-client/CHANGELOG.md

12 KiB
Raw Blame History

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 — 新增 listSessionsDetailed title 透传测试

Changed

会话列表过滤

  • unifiedAgent.tslistAllSessionsDetailed() 仅返回 isReady 为 true 的引擎会话,避免崩溃/终止的 ACP 进程污染「活跃会话」列表

服务启动流程优化

  • ClientPage.tsxhandleStartAll 先调用 reg 接口,返回后再 step by step 启动服务
  • ClientPage.tsxhandleStartServiceManual 简化为直接启动,不调用 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.exeWindows 必须)
  • PATH 优先级优化 - 内置 Node.js > Electron > 内置 Git > 应用内 > uv > 系统
  • Windows 环境变量优化(参考 LobsterAI
    • 关键系统变量SystemRoot, windir, COMSPEC, SYSTEMDRIVE
    • Windows 系统目录System32, Wbem, PowerShell, OpenSSH
    • 注册表读取最新 PATH解决后安装工具不在 PATH 问题)
    • MSYS2_PATH_TYPE=inheritgit-bash 正确继承 PATH
    • ORIGINAL_PATHPOSIX 格式供 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 - 使用 spawnJsFileresolveNpmPackageEntry 替代原有 spawn
  • engineManager.ts - 使用 spawnJsFileresolveNpmPackageEntry 启动引擎
  • acpClient.ts - 使用 spawnJsFileresolveNpmPackageEntry 启动 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-sdkscripts/prepare-sdk.js 打包前将 vendors/qimingcode-sdk 复制到 node_modules/@qiming-ai/sdk,避免 electron-builder 因 file: 符号链接报错
  • clean:electron-cachenpm run clean:electron-cachescripts/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