CodeMate:基于多模型的终端AI编程搭档项目

终端里的 AI 编程搭档 — 支持多模型、自动备份、中英文双语。

分支2Tags7

CodeMate

极简主义 AI 编程助手 — 多模型 / 自动备份 / 双语 / 记忆系统 / 子代理 / 局域网与互联网协作 / 项目保护

CodeMate x CostCut-Infer(https://gitcode.com/fhz1206/CostCut-Infer )

当前版本: v2.3.0 · Python 3.14+ · PyQt6 桌面 UI · DSH 插件系统兼容 · DSH 极简提示词默认

English README (英文文档)


📑 目录


功能总览

类别 功能
🤖 多模型 DeepSeek / OpenAI / Anthropic / Ollama / 阶跃星辰 / OpenRouter,任意 OpenAI 兼容 API
🔒 安全 自动备份、四级审批、项目保护(越界/敏感文件/Git 拦截)
🧠 记忆 .md 格式持久化,全局 + 项目双作用域,跨模型可读
🏠 局域网协作 WebSocket 房间,房主审批,全房间广播
🌐 互联网协作 基于 Relay/STUN 的房间,支持非局域网团队
📎 多模态 /attach 图片/音频/视频/代码文件
🧩 扩展 skills/ 目录技能包自动加载,扩展开关独立控制
⚙️ 自检 启动 17 项功能检测,/selfcheck 随时检测
🖥 Computer Use 截图、鼠标、键盘、窗口自动化(对标 Codex)
🖱 鼠标/键盘 第三方技能包:移动/点击/滚动/拖拽/输入
🧪 测试 53 个 pytest 单元测试 + GitHub Actions CI/CD

快速开始

# 1. 安装依赖
pip install rich prompt_toolkit httpx websockets
pip install PyQt6 psutil fastapi uvicorn pydantic python-dotenv
pip install pyautogui pygetwindow pillow   # Computer Use 技能
pip install -e .

# 2. 配置 codemate.toml(见下节)
# 3. 启动
python app.py                    # CLI 模式(默认)
python app.py --desktop          # PyQt6 桌面 UI
python app.py --webui            # WebUI(HTTP + WebSocket)
python -m codemate               # 同 CLI 模式
python -m codemate --desktop     # 桌面 UI

需要 Python 3.14+(使用内置 tomllib 解析配置)。


桌面 UI

CodeMate v2.0+ 包含极简主义 PyQt6 桌面应用作为主要界面:

  • 首次运行主题选择:白天(浅色)/ 晚上(深色)/ 自适应(跟随系统)
  • 默认自适应主题:自动跟随系统偏好
  • 持久化设置:主题和语言保存到 codemate.toml
  • 极简设计:干净的聊天界面,显示提供商状态
  • 全部 CLI 功能:完整的工具支持、记忆、协作等
  • 模式选择器:顶部下拉框切换 Standard / Python / Workflow 模式

启动方式:

python app.py --desktop
# 或
python -m codemate --desktop
# 或
codemate-desktop   # 安装后的命令

配置文件 codemate.toml

完整示例(含注释):

# ═══════════════════════════════════════════════
#  CodeMate 配置文件
# ═══════════════════════════════════════════════

# ── 全局设置(必须放在所有 [段] 之前)──
default_provider = "deepseek"    # 默认提供商(对应 [providers] 段名)
language = "zh"                  # 界面语言: en / zh
prompt_style = "dsh_minimal"     # 提示词风格: dsh_minimal / codemate_classic

theme = "adaptive"               # 主题: light / dark / adaptive(跟随系统)
theme_first_run = false          # 首次运行是否显示主题选择器

max_tokens      = 4096           # 每次生成最大 token 数
temperature     = 0.0            # 生成温度 (0.0-2.0)
max_tool_rounds = 20             # 单次对话最大工具调用轮次
context_window  = 128000         # 全局上下文窗口
backup_rounds   = 30             # 备份保留轮次(0=保留全部)

approval_level  = "auto"         # 审批级别: auto/plan/build/high-build

# ── AI 服务商(可配多个)──
[providers.deepseek]
type            = "openai"       # API 类型: openai / anthropic
api_key         = "sk-..."
model           = "deepseek-chat"
base_url        = "https://api.deepseek.com"
context_window  = 64000

[providers.ollama]
type            = "openai"
api_key         = ""
model           = "qwen2.5-coder:14b"
base_url        = "http://localhost:11434/v1"
context_window  = 32000

# ── 子代理 ──
[sub_agent]
enabled     = true               # 启用子代理委派
max_rounds  = 10                 # 子代理最大工具轮次
model       = ""                 # 子代理模型(空=与主 Agent 相同)

# ── 项目保护 ──
[project_protection]
enabled               = true
block_outside_paths   = true
sensitive_files       = true
git_warning           = true
sensitive_exts = [".db", ".sqlite", ".sql", ".key", ".pem",
                  ".p12", ".keystore", ".env", ".secret"]

# ── 扩展开关 ──
[extensions]
enabled     = true               # 总开关: false = 全部关闭
skills      = true               # 技能系统
delegate    = true               # 子代理工具
memory      = true               # 记忆系统
todo        = true               # 任务列表
attachment  = true               # 多模态附件
collab      = true               # 局域网协作
relay       = true               # 互联网协作 (relay/STUN)
computer_use = true              # 电脑自动化(对标 Codex)
miniwindow  = true               # 悬浮窗
protection  = true               # 项目保护
approval    = true               # 审批系统

# ── Relay 服务器(互联网协作用)──
[relay]
host = "relay.codemate.app"      # 公共 relay 服务器地址
port = 8766                      # 公共 relay 服务器端口

修改配置后执行 /reload 立即生效,无需重启。


命令一览

输入 / 后按 Tab 自动补全。

命令 说明
/help 显示帮助(表格形式)
/clear 清除对话历史和缓存
/status 查看项目状态和配置
/providers 列出所有已配置的提供商
/reload 重新加载 codemate.toml
/skills 列出已加载的技能包
/extensions 查看扩展开关状态
/selfcheck 运行全部功能自检(17 项)
/lang en / /lang zh 切换语言
/mode <mode> 切换 Agent 模式: standard/python/workflow
/workflow 工作流模式: save/list/clear/status
/subagent 子代理管理: list/status/add/insert/cancel
/history 查看对话历史
/tool <N> 查看第 N 个工具调用完整输出
/diff <N> 查看文件修改前后红绿对比
/undo 列出可恢复的备份并回滚
/update 检查并应用更新
/attach <文件> 附加图片/音频/视频/代码文件
/room create 创建局域网协作房间(房主)
/room join <ID> 加入房间(成员)
/room status 查看房间状态
/room pending 查看待审批请求(房主)
/room leave 离开/关闭房间
/approve <ID> 批准房间请求(房主)
/reject <ID> 拒绝房间请求(房主)
/relay create 创建互联网 relay 房间
/relay join <ID> <TOKEN> 加入 relay 房间
/miniwindow 最小化到悬浮窗(PyQt6)
/exit 退出 CodeMate

工具列表

内置工具(15 个)

工具 参数 说明
read_file file_path, offset, limit 读取文件,返回带行号内容
write_file file_path, content 写入文件(修改前自动备份)
edit_file file_path, old_string, new_string, replace_all 精确替换文件片段(自动备份)
glob pattern, path 按 glob 模式搜索文件名
grep pattern, path, context, max_results 按正则搜索文件内容
list_directory path, depth 列出目录树
bash command, timeout 执行 Shell 命令
search_web query 搜索网络
fetch_url url, max_chars 抓取网页内容
create_todo action, title, items 创建/管理任务列表(.md 文件)
delegate action, task, context, tools, name, subagent_id, task_description, insert_after 子代理管理(创建/列表/状态/添加任务/插入任务/取消)
memory_save key, value, scope 保存记忆(project/global)
memory_read key, scope 读取记忆
memory_list scope 列出所有记忆
computer_use action, x, y, text, key, keys, button, clicks, direction, amount, window_title, duration, save_path 电脑自动化(截图、鼠标、键盘、窗口)

核心特性详解

1. 自动备份 + Diff + 撤销

每次文件修改都会在 cache/backups/ 创建带时间戳的备份:

  • Diff 视图:/diff <N> 显示第 N 次工具调用的红绿对比
  • 回滚:/undo 列出可恢复的备份,选择一个恢复
  • 保留策略:配置 backup_rounds 控制保留轮数(0 = 无限制)

2. 四级审批系统

通过 codemate.toml 的 approval_level 或 /approval 命令配置:

级别 行为
auto 自动批准安全操作(read, grep, glob);写入/Shell 需要确认
plan 所有工具调用都需要确认,执行前显示计划
build 写入/Shell 需要确认;只读操作自动批准
high-build 所有操作都确认,包括只读

CLI 中 F2 循环切换模式。桌面 UI 在状态栏显示当前模式。

3. 项目保护

执行前拦截危险操作:

  • 路径越界:阻止读取/写入项目根目录外的文件(网络搜索除外)
  • 敏感文件:拦截 .env、.key、.pem、.db、.sql 等
  • Git 操作:有未提交更改时警告 git pull/push/merge

在 [project_protection] 段配置。

4. 持久化记忆

cache/memory.md 中的 .md 格式 — 重启后保留,跨模型可读:

  • 作用域:global(所有项目)+ project(仅当前项目)
  • 命令:memory_save, memory_read, memory_list
  • 自动加载:Agent 在对话开始时读取相关记忆

5. 子代理委派

创建隔离子代理执行复杂任务:

  • 在 [sub_agent] 段启用(默认已启用)
  • 工具:delegate(action, task, context, tools, ...)
  • 子代理有独立上下文,向父级返回摘要
  • 后台运行:非阻塞执行,立即返回 ID
  • 任务管理:主 Agent 可查看状态、添加任务、插入任务、取消
  • 用途:代码审查、研究、分析

子代理管理命令:

/subagent list                       # 列出所有子代理
/subagent status <id>                # 查看详细状态
/subagent add <id> <任务描述>         # 添加新任务
/subagent insert <id> <索引> <任务>   # 在指定位置插入任务
/subagent cancel <id>                # 取消子代理

6. 局域网协作

本地网络内基于 WebSocket 的房间:

  • 房主:/room create → 获得 RoomID(6 字符)+ 局域网地址
  • 成员:/room join <RoomID> → 输入房主 IP
  • 审批:房主用 /approve <ID> / /reject <ID> 审批成员请求
  • 广播:所有事件(加入/离开/请求/审批)对所有人可见
  • 端口:8765(可配置)

7. 互联网协作 (Relay) — v2.0 新增

非同一局域网的团队使用。采用 relay/STUN 架构:

  • Relay 服务器:转发客户端消息的公共服务器
  • 房主:/relay create → 获得 RoomID + Token
  • 成员:/relay join <RoomID> <Token> → 通过 relay 连接
  • 相同功能:请求审批、聊天、成员管理
  • 默认 relay:relay.codemate.app:8766(在 [relay] 段配置)
  • 自建:运行 python -m codemate.collab.relay server 部署私有 relay

8. 多模态附件

/attach <文件> 支持:

类型 扩展名 发送格式
图片 png/jpg/gif/webp/bmp image_url + base64
音频 mp3/wav/m4a/ogg/aac input_audio + base64
视频 mp4/mov/avi/mkv 文本引用 + 路径提示
代码 py/js/rs/go/java 等 代码块文本(超 2 万字符截断)

实际图片/音频处理取决于模型是否支持(GPT-4o/Claude 支持视觉)。

9. Computer Use 技能(默认,对标 Codex) — v2.1 新增

computer-use 技能默认包含,提供对标 Codex computer-use 工具的电脑自动化能力:

操作列表:

操作 说明
screenshot 截屏,保存到文件或返回 base64
click, double_click, right_click 鼠标点击指定坐标
move 移动鼠标(可带时长)
drag 从 (x,y) 拖拽到 (x2,y2)
scroll 上下左右滚动
type 输入文本
key 按单个键
hotkey 组合键(如 ctrl+c)
window_list 列出所有窗口及边界
window_focus 按标题聚焦窗口
window_bounds 获取窗口位置/大小
wait 等待指定时长

工具调用示例:

# 截屏
computer_use(action="screenshot", save_path="screen.png")

# 点击坐标
computer_use(action="click", x=100, y=200)

# 输入文本
computer_use(action="type", text="Hello World")

# 组合键
computer_use(action="hotkey", keys=["ctrl", "shift", "esc"])

# 窗口管理
computer_use(action="window_list")
computer_use(action="window_focus", window_title="CodeMate")

依赖: pip install pyautogui pygetwindow pillow

10. Agent 模式 — v2.1 新增

三种 Agent 操作模式,通过 /mode 命令或桌面 UI 下拉框切换:

模式 说明 特性
Standard(默认) 带工具的 ReAct 循环 15 个工具、审批、保护
Python 持久化 Python 环境(Phi Agent 风格) %reset, %history, %vars;变量跨执行持久化
Workflow 记录操作 → 生成技能 /workflow save <名称> <描述> → 生成 SKILL.md + workflow.py

Python 模式命令:

%reset     # 清空环境
%history   # 显示执行历史
%vars      # 列出变量

Workflow 模式命令:

/workflow save <名称> <描述>   # 生成技能并保存到 skills/
/workflow list                 # 列出已生成的技能
/workflow clear                # 清空记录的步骤
/workflow status               # 查看当前记录状态

11. Skills 扩展系统

将技能包放入 skills/ 目录,每个技能是一个文件夹:

skills/
  my-skill/
    SKILL.md     # 必填: YAML frontmatter (name/description) + 指令
    scripts/     # 可选: 可执行脚本 (.js/.py/.sh, 通过 bash 调用)
    tools.py     # 可选: CodeMate 原生工具 (register_tool() 自动注册)

SKILL.md 格式(推荐:Agent Skills 开放标准)

采用 agentskills.io YAML frontmatter,兼容互联网上的技能包:

---
name: my-skill
description: 技能做什么、什么场景使用。Agent 靠这段判断是否触发本技能。
---

# 技能名称

## Instructions

给 Agent 的分步指令(正文按需读取,不会常驻上下文)

CodeMate 旧版格式(仍兼容):

# 技能名称

## Description
技能做什么

## Instructions
给 Agent 的指令

## When to use
什么场景下使用

加载机制:

  • 启动时自动扫描 skills/ 目录,frontmatter 和旧格式都能识别
  • tools.py 中的 register_tool() 自动注册原生工具(可选,纯 md 也能用)
  • name + description 注入系统提示词让 LLM 知道何时使用
  • /skills 列出已加载技能,/extensions 查看开关状态

12. 扩展开关

[extensions] 段控制每个扩展,/reload 生效:

[extensions]
enabled     = true    # 总开关
skills      = true
delegate    = true
memory      = true
todo        = true
attachment  = true
collab      = true
relay       = true
computer_use = true   # 电脑自动化(对标 Codex)
miniwindow  = true
protection  = true
approval    = true

关闭后对应工具不注册、命令不可用。/extensions 查看状态:

>>> /extensions
扩展开关 (11/11 启用)
  总开关: ✅ 开启
  ✅ skills / ✅ delegate / ✅ memory / ✅ todo
  ✅ attachment / ✅ collab / ✅ relay
  ✅ computer_use / ✅ miniwindow / ✅ protection / ✅ approval

13. 启动自检

启动时自动运行 17 项检测,发现问题显示红色警告:

╔═ Self-Check ═══════════════════════╗
║ ⚠ 发现 2 项问题:                   ║
║   ❌ Shell 工具: bash 执行失败     ║
╚═════════════════════════════════════╝

/selfcheck 手动运行完整检测(17 项):

═══ CodeMate 自检 ═══
检测项: 17  |  通过: 17  |  失败: 0
  ✅ 配置文件 / 语法 / 导入链 / 配置系统
  ✅ 工具注册 / 文件工具 / Shell / 备份
  ✅ 记忆 / 国际化 / 技能 / 项目索引
  ✅ Agent / 项目保护 / 多模态
  ✅ 局域网协作 / 悬浮窗 (PyQt6)
  ✅ 互联网协作 (Relay)

14. 悬浮窗监控

/miniwindow 最小化终端到圆角悬浮窗:

┌──────────────────────────────────────────────────┐
│  ╭─────╮    ┌────────────────────────────────┐   │
│  │ 32% │    │  CPU: 23%   RAM: 41%           │   │
│  ╰─────╯    └────────────────────────────────┘   │
│  上下文 Token   CPU + RAM 实时监控 (1秒刷新)       │
└──────────────────────────────────────────────────┘
  • 左侧圆环:上下文 token 占用百分比(动态实时)
  • 右侧状态条:CPU 占用 + RAM 占用(psutil,1 秒刷新)
  • 暗色主题,左键拖动,双击恢复终端
  • 需要 PyQt6 + psutil

开发技能包

按 Agent Skills 标准开发,第三方技能包只需两步:

1. 创建目录结构:

skills/my-skill/
  SKILL.md      # 必填: frontmatter(name/description) + 指令
  scripts/      # 可选: 可执行脚本 (.js/.py/.sh…), Agent 经 bash 调用

2. 编写 SKILL.md:

---
name: my-skill
description: 做什么、什么时候用(Agent 据此判断是否触发本技能)
---

# My Skill

## Instructions

1. 分步指令……需要计算/处理时运行捆绑脚本:
   node skills/my-skill/scripts/do.js <参数>

重启 CodeMate 或 /reload 自动加载,/skills 确认。

可选:需要原生 Python 工具(不经 bash)时,添加 tools.py 调用 register_tool() — 这是 CodeMate 的扩展机制,非标准要求。


项目结构

codemate/                        # 45+ Python 模块
├── __main__.py                  # 入口 (python -m codemate)
├── cli.py                       # CLI 主循环
├── i18n.py                      # 国际化 (中/英 80+ 条目)
├── selfcheck.py                 # 启动自检 (17 项)
├── extensions.py                # 扩展开关管理
├── config/                      # 配置层
│   ├── settings.py              # 全局配置 + TOML 加载
│   └── providers.py             # 提供商配置解析
├── ui/                          # 界面层
│   ├── display.py               # 渲染:工具调用/状态/历史/diff
│   ├── commands.py              # 命令分发 + 帮助表格
│   ├── room_commands.py         # 局域网协作房间命令
│   └── desktop/                 # PyQt6 桌面 UI (NEW)
│       ├── __init__.py
│       └── app.py               # 桌面主应用
├── llm/                         # LLM 提供商层
│   ├── __init__.py              # Message/ToolCall/LLMProvider
│   ├── prompts.py               # 系统提示词 (DSH 极简 + 经典)
│   ├── providers.py             # 工厂模式
│   ├── openai_compat.py         # OpenAI 兼容 API
│   └── anthropic_provider.py    # Claude API
├── agent/                       # Agent 核心
│   ├── agent.py                 # ReAct 主循环(支持多模式)
│   ├── modes.py                 # Agent 模式管理 (NEW)
│   ├── subagent_manager.py      # 子代理管理器 (NEW)
│   ├── context.py               # 对话上下文
│   ├── tool_runner.py           # 工具调度
│   └── history.py               # 历史持久化
├── tools/                       # 内置工具 (15 个)
│   ├── registry.py              # 工具注册表
│   ├── file_tools.py            # 文件操作
│   ├── shell_tools.py           # Shell 执行
│   ├── web_tools.py             # 网络搜索
│   ├── backup.py                # 备份 + diff + undo
│   ├── todo_tools.py            # 任务列表
│   ├── delegate.py              # 子代理(完整管理)
│   ├── memory.py                # 记忆系统 (.md)
│   ├── approval.py              # 四级审批
│   ├── protection.py            # 项目保护
│   ├── attachment.py            # 多模态附件
│   ├── updater.py               # 版本更新
│   └── miniwindow.py            # 悬浮窗 (PyQt6)
├── collab/                      # 局域网 + 互联网协作
│   ├── __init__.py              # 导出: CollabServer, CollabClient, RelayServer, RelayClient
│   ├── server.py                # 局域网 WebSocket 服务器(房主)
│   ├── client.py                # 局域网 WebSocket 客户端(成员)
│   ├── room.py                  # 房间/请求管理
│   ├── protocol.py              # JSON 消息协议
│   └── relay.py                 # Relay/STUN 服务器与客户端 (NEW)
├── skills/                      # 技能系统
│   └── loader.py                # 技能发现/加载
└── project/
    └── indexer.py               # 项目索引

skills/                          # 技能包
├── computer-use/                # 电脑自动化(对标 Codex,默认)
│   ├── SKILL.md
│   ├── computer_use.py          # 原生 Python 实现
│   ├── tools.py                 # CodeMate 原生工具注册
│   └── scripts/computer-use.js  # JS 包装器
├── example-skill/               # 示例技能(标准格式 + JS)
│   ├── SKILL.md
│   └── scripts/hello.js
├── mouse-control/               # 鼠标控制(零依赖 JS)
│   ├── SKILL.md
│   └── scripts/mouse.js
└── keyboard-input/              # 键盘输入(零依赖 JS)
    ├── SKILL.md
    └── scripts/keyboard.js

tests/                           # 测试目录 (NEW)
├── test_compat.py               # 兼容性测试 (20 个)
├── test_modes.py                # Agent 模式测试 (14 个)
├── test_computer_use.py         # Computer Use 测试 (6 个)
├── test_subagent.py             # 子代理测试 (13 个)
└── ...

.github/workflows/ci.yml         # GitHub Actions CI/CD (NEW)

架构设计

用户输入 → cli.py → commands.py → agent.py → llm/ (LLM API)
                      │              │
               room_commands.py   tools/  (15 个内置工具)
               (局域网协作)          │
                      │          approval.py (审批)
               collab/server.py   protection.py (项目保护)
                                 backup.py (备份)
                                 display.py → 用户

桌面 UI (--desktop):
用户输入 → desktop/app.py → agent.py → llm/ (LLM API)
                      │
               PyQt6 聊天 UI + 主题系统 + 模式选择器

数据流:

  1. 用户输入 → 主循环(CLI 或桌面)
  2. agent.py 调用 LLM 生成工具调用
  3. 每个工具执行前经过:审批检查 → 项目保护检查
  4. 文件修改前自动备份,结果返回上下文
  5. LLM 整合结果流式输出给用户

依赖

rich>=13.0           # 终端彩色输出
prompt_toolkit>=3.0  # 交互式输入 + Tab 补全
httpx>=0.27          # HTTP 客户端
websockets>=12.0     # 局域网/互联网协作
PyQt6>=6.6           # 桌面 UI(必需)
psutil>=5.9          # 系统监控
fastapi>=0.109       # WebUI 后端
uvicorn>=0.27        # ASGI 服务器
pydantic>=2.5        # 数据校验
python-dotenv>=1.0   # .env 文件支持
pyautogui>=0.9       # Computer Use 自动化
pygetwindow>=0.0.9   # 窗口管理
pillow>=10.0         # 图像处理

开发依赖:

pytest>=8.0          # 测试框架
pytest-asyncio       # 异步测试支持
ruff                 # 代码检查
mypy                 # 类型检查

打包为 exe

# 方式一:双击 build_exe.bat
# 方式二:手动执行
pyinstaller --onedir --name codemate --console \
    --add-data "codemate;codemate" \
    --add-data "skills;skills" \
    --add-data "version.json;." \
    codemate/__main__.py

输出:dist/codemate/codemate.exe(单目录,解压即用)

注意:skills/ 和 codemate.toml 需放在 exe 同目录。


测试

# 运行全部测试
python -m pytest tests/ -v

# 运行特定测试文件
python -m pytest tests/test_compat.py -v
python -m pytest tests/test_modes.py -v
python -m pytest tests/test_computer_use.py -v
python -m pytest tests/test_subagent.py -v

# 运行特定测试类
python -m pytest tests/test_subagent.py::TestSubAgentManager -v

CI/CD: GitHub Actions 自动运行测试、lint、构建、部署(见 .github/workflows/ci.yml)。


更新日志

v2.3.0(当前)— 测试与 CI/CD

  • 测试目录 tests/:53 个 pytest 测试
    • test_compat.py(20 个):配置、i18n、提示词、工具、协作、技能、自检、模式、子代理、computer-use
    • test_modes.py(14 个):AgentModes、Python 模式、Workflow 模式、PythonExecutionState
    • test_computer_use.py(6 个):工具注册、schema、参数、实现
    • test_subagent.py(13 个):SubAgentManager、delegate 工具、集成
  • GitHub Actions CI/CD(.github/workflows/ci.yml)
    • 测试、lint(ruff + mypy)、构建、PyPI 部署
  • app.py 统一入口:CLI / Desktop / WebUI 模式
  • .gitignore 更新:排除 cache/

v2.2.0 — 子代理增强

  • SubAgentManager:跟踪和管理子代理
  • delegate 工具完整管理操作:create, list, status, add_task, insert_task, cancel
  • 后台执行:非阻塞,立即返回 ID
  • CLI 命令:/subagent list|status|add|insert|cancel
  • 默认 sub_agent.enabled = true

v2.1.0 — Agent 模式 + Computer Use

  • Agent 模式:Standard, Python (Phi Agent 风格), Workflow
    • Python 模式:持久化 Python REPL,支持 %reset, %history, %vars
    • Workflow 模式:记录操作 → 生成 Agent Skills (/workflow save)
    • 通过 /mode 命令和桌面 UI 下拉框切换
  • Computer Use 技能(默认,对标 Codex):
    • 截图、鼠标、键盘、窗口自动化
    • 原生工具:computer_use(action, x, y, text, key, keys, ...)
    • 依赖:pyautogui, pygetwindow, pillow

v2.0.0 — 大重构

  • 极简 PyQt6 桌面 UI,自适应主题(白天/晚上/自适应)
  • 首次运行主题选择器,持久化到 codemate.toml
  • DSH 极简提示词默认(通过 prompt_style 可配置)
  • DSH 插件系统完全兼容(扩展注册表模式)
  • 互联网协作:Relay/STUN(relay.py, /relay 命令)
  • 局域网协作保留(房间管理增强)
  • Python 3.14+ 要求
  • 更新依赖:PyQt6, FastAPI, Uvicorn, Pydantic
  • 入口点:codemate, codemate-desktop, --desktop, --webui

v1.3.1

  • 局域网多人协作(WebSocket 房间 + 房主审批)
  • 全房间广播(加入/离开/请求/审批对所有人可见)
  • 项目保护(路径越界/敏感文件/Git 拦截)
  • 多模态附件(/attach 图片/音频/视频/代码)
  • Skills 扩展系统(第三方技能包自动注册)
  • 扩展开关([extensions] 段,9 个独立开关)
  • 启动自检(17 项)+ /selfcheck
  • 悬浮窗监控(上下文 token + CPU/RAM)
  • 命令帮助改为表格形式
  • 鼠标控制技能包(skills/mouse-control)

v1.2.0

  • 四级审批系统(none/low/medium/high)
  • /undo 代码回滚 + 多版本备份
  • 记忆系统改为 .md 格式
  • /diff 文件改动对比
  • 子代理委派(隔离上下文)
  • UI 重构为多模块(commands/display/room_commands)
  • 任务列表强制化(create_todo 必先列计划)

v1.1.3

  • 记忆系统(memory_save/read/list)
  • 任务列表工具(create_todo)
  • 工具调用着色区分
  • 路径穿越安全防护
  • Agent finish 循环 bug 修复

v0.2.0

  • 自动版本检测与更新提示
  • 对话历史按项目-时间分组存储
  • 自定义服务商支持(OpenAI 兼容)
  • 蓝色旋转等待动画

v0.1.0

  • 初始发布:多模型、文件操作、Shell、备份、双语界面
  • PyInstaller 打包,Windows .exe

常见问题

Q: 启动时报 No module named ...? A: 安装缺失依赖:pip install rich prompt_toolkit httpx websockets PyQt6 psutil fastapi uvicorn pydantic python-dotenv pyautogui pygetwindow pillow

Q: 修改 codemate.toml 不生效? A: 执行 /reload 重新加载;注意 [sub_agent] 是下划线不是连字符。

Q: 悬浮窗 / 桌面 UI 报错? A: 确认已安装 PyQt6:pip install PyQt6。用 python -m codemate --desktop 启动。

Q: 局域网协作连不上? A: 确认同局域网、房主端口 8765 未被防火墙拦截、RoomID 大小写一致。

Q: 上下文满了怎么办? A: 执行 /clear 清空上下文,或调大 context_window。

Q: 想禁用某个功能? A: 在 [extensions] 段将对应项设为 false,然后 /reload。

Q: 记忆文件在哪? A: cache/memory.md,直接编辑即可跨模型迁移。

Q: 怎么用互联网协作 (Relay)? A: 在 [extensions] 启用 relay = true,然后房主用 /relay create,成员用 /relay join <ID> <TOKEN>。需要公共 relay 服务器。

Q: 怎么切换提示词风格? A: 在 codemate.toml 设置 prompt_style = "codemate_classic" 用原版详细提示词,或 prompt_style = "dsh_minimal" 用 DSH 极简(默认)。

Q: 怎么运行测试? A: python -m pytest tests/ -v。需要 pip install pytest pytest-asyncio。

Q: Computer Use 在无显示器环境能跑吗? A: 需要图形界面(Windows 桌面 / X11)。CI 无显示器环境下 screenshot/click 会失败,属预期行为。


开发

python app.py             # 启动 CLI
python app.py --desktop   # 启动桌面 UI
python app.py --webui     # 启动 WebUI
python -m pytest tests/ -v  # 运行测试

CI/CD 流程(.github/workflows/ci.yml):

  1. test — Ubuntu/Windows + Python 3.14 运行 53 个测试
  2. lint — ruff 检查 + mypy 类型检查
  3. build — 发布时构建 Python 包
  4. deploy-pypi — 自动发布到 PyPI

项目介绍

终端里的 AI 编程搭档 — 支持多模型、自动备份、中英文双语。

https://fhz1206.github.io/CodeMate/定制我的领域