Go to file
JOJO f383b0ec71 fix(ui): refine dark code block styling
Remove stray borders, outlines, shadows, and token backgrounds from markdown code content in dark mode to avoid the visible white frame around code text.

Adjust code block body padding so code content sits closer to the block edge while staying visually aligned with the language label.
2026-06-07 02:57:58 +08:00
__pycache__ chore: initial import 2025-11-14 16:44:12 +08:00
.easyagent chore: snapshot current changes 2026-03-10 23:48:40 +08:00
.playwright-mcp feat(host-security+ui): unify host execution/approval behavior, runtime notices, and approval overlay UX 2026-05-12 19:16:38 +08:00
agentskills feat(ui): refine sidebar workspace and code blocks 2026-05-28 03:53:49 +08:00
android-webview-app fix(mobile): align conversation overlay in app 2026-05-28 20:50:44 +08:00
api_doc chore: add docs and remove sub_agent 2026-03-17 22:46:43 +08:00
cli feat(file-edit): support batched replacements 2026-05-31 13:15:37 +08:00
cli-react-demo feat(cli): 新增 React/Ink CLI 端,修复全屏布局与光标定位 2026-05-16 01:06:51 +08:00
config refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
core refactor(prompt): freeze system prompts and update personalization modes 2026-06-07 02:52:00 +08:00
demo/stacked-blocks chore: snapshot before stacked blocks demo 2026-01-01 01:09:24 +08:00
doc chore: sync pending changes 2026-01-05 21:48:55 +08:00
docker docs: refresh readme and phase2 summary 2025-11-23 21:24:09 +08:00
docs refactor(models): use dynamic api model registry 2026-05-29 00:20:54 +08:00
easyagent fix(prompt): merge disabled-tool notice into leading system prompts 2026-05-09 18:56:49 +08:00
modules refactor(prompt): freeze system prompts and update personalization modes 2026-06-07 02:52:00 +08:00
prompts refactor(prompt): freeze system prompts and update personalization modes 2026-06-07 02:52:00 +08:00
scripts refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
server fix(models): preserve session model selection 2026-06-02 20:36:51 +08:00
skills fix: adapt deepseek custom models and harden todo/tool gating 2026-04-24 18:31:03 +08:00
static fix(ui): refine dark code block styling 2026-06-07 02:57:58 +08:00
test refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
utils refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
_bootstrap.sh feat(release): 新增开箱启动脚本 setup.sh / start.sh(P4 第一步) 2026-06-01 17:19:45 +08:00
.env.example refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
.eslintrc.cjs feat: modularize frontend layout 2025-11-25 22:41:15 +08:00
.gitignore refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
.prettierignore feat: modularize frontend layout 2025-11-25 22:41:15 +08:00
.prettierrc feat: modularize frontend layout 2025-11-25 22:41:15 +08:00
.stylelintrc.cjs refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
AGENTS.md refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
CLAUDE.md refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
main.py refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents 2026-06-01 16:59:34 +08:00
package-lock.json refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
package.json refactor(frontend): 颜色 token 系统两层重构 + 三主题填色 + 去半透明 2026-06-06 16:20:58 +08:00
README.md refactor(models): use dynamic api model registry 2026-05-29 00:20:54 +08:00
requirements.lock.txt fix(deps): 声明 httpx[http2] / h2,修复干净环境缺包启动失败 2026-06-01 17:49:00 +08:00
requirements.txt fix(deps): 声明 httpx[http2] / h2,修复干净环境缺包启动失败 2026-06-01 17:49:00 +08:00
setup.sh feat(release): 新增开箱启动脚本 setup.sh / start.sh(P4 第一步) 2026-06-01 17:19:45 +08:00
start.sh feat(release): 新增开箱启动脚本 setup.sh / start.sh(P4 第一步) 2026-06-01 17:19:45 +08:00
tsconfig.json feat: modularize frontend layout 2025-11-25 22:41:15 +08:00
tsconfig.node.json feat: modularize frontend layout 2025-11-25 22:41:15 +08:00
upload_android_apk.sh fix: upload script only sync release apk 2026-04-07 13:12:24 +08:00
vite.config.ts fix: 完善工具约束与项目文档说明 2026-04-10 14:33:41 +08:00
web_server.py refactor: split web_server into modular architecture 2026-01-22 09:21:53 +08:00

AI Agent 系统

一个功能完整的 AI 智能体系统,支持多模态交互、子智能体协作、实时终端操作和丰富的工具集成。

当前状态2026-05

  • Web 端仍然是主线入口,基于 Flask + Vue 3。
  • 新 CLI 端已开始重写,位于 cli/,技术栈为 React 19 + Ink 6 + TypeScript。
  • 当前 CLI 不是独立后端;它会直接连接本地 8091 Web API并复用现有会话、任务、权限、工作区等接口。
  • CLI 已实现“启动即连接后端并新建会话”的流程,但仍处于持续打磨阶段,输入法、光标、时间线裁剪等终端细节仍在迭代。

CLI 快速开始

安装与构建

npm install
npm --prefix cli install
npm run cli:build

开发启动

npm run cli

或直接:

npm --prefix cli run dev

在目标目录启动 CLI

cd /path/to/your/project
npm --prefix /Users/jojo/Desktop/agents/正在修复中/agents/cli run dev

说明:

  • CLI 会默认把“当前终端目录”视为目标工作目录。
  • 若当前目录尚未加入工作区,启动后会先提示是否将该目录加入工作区。
  • CLI 会优先连接 http://127.0.0.1:8091;若本地服务未启动,会尝试拉起:
python3 -m server.app --path <当前目录> --port 8091 --thinking-mode

当前 CLI 已支持的能力

  • 启动即创建会话,不必等首条消息发送后再建会话
  • /new /resume /model /versioning /permission /execution
  • /workspace /compact /tools /path /skill /status /help /clear /exit
  • 基于任务轮询的时间线展示:用户消息、工具调用、模型输出、审批、后台状态
  • 宿主机工作区接入、版本控制开关、权限模式与执行环境切换

当前 CLI 已知限制

  • 默认隐藏思考内容,只显示“思考中 / 思考完成”标题
  • 时间线布局、终端输入法光标、长内容换行等细节仍在持续修正
  • 目前更适合本地开发与人工交互,不建议当作完全稳定的自动化终端入口

核心特性

🎯 多模式运行

系统支持三种运行模式,适应不同场景需求:

  • 快速模式 (fast): 无思考过程,快速响应,适合简单任务
  • 思考模式 (thinking): 启用推理过程,提供更深入的分析
  • 深度思考模式 (deep): 最强推理能力,适合复杂问题

🌐 双端架构

  • Web 模式: 基于 Flask + REST 任务轮询 + Vue 3 的现代化 Web 界面(保留 Socket.IO 兼容通道)

    • 实时消息流式传输
    • 多对话管理
    • 可视化文件管理器
    • 终端会话面板
    • 监控仪表板
  • CLI 模式: 命令行交互界面,适合开发和自动化场景

🤖 子智能体系统

支持创建独立的子智能体处理复杂任务:

  • 并行执行: 最多同时运行多个子智能体
  • 独立上下文: 每个子智能体拥有独立的工作空间和对话历史
  • 任务隔离: 子智能体在独立进程中运行,互不干扰
  • 状态追踪: 实时监控子智能体的执行状态和进度
  • 后台运行: 支持后台模式,主智能体可继续处理其他任务

工具接口:

  • create_sub_agent: 创建并启动子智能体
  • close_sub_agent: 终止运行中的子智能体

🛠️ 丰富的工具集

系统提供分类管理的工具集,可按需启用/禁用:

文件操作

  • read_file: 读取文件内容
  • write_file: 写入文件
  • edit_file: 精确编辑文件内容
  • list_files: 列出目录内容
  • search_files: 搜索文件

说明:目录创建/重命名/删除等通用文件管理建议统一使用 run_commandrun_python

终端操作

实时终端会话:

  • terminal_session: 创建持久化终端会话
  • terminal_input: 向终端发送命令
  • terminal_snapshot: 获取终端输出快照
  • sleep: 等待命令执行完成

快速命令执行:

  • run_command: 执行 Shell 命令
  • run_python: 执行 Python 代码

网络检索

  • web_search: 网络搜索
  • extract_webpage: 提取网页内容
  • save_webpage: 保存网页到本地

多模态能力

  • vlm_analyze: 视觉语言模型分析图片
  • ocr_image: OCR 文字识别
  • view_image: 查看图片内容
  • view_video: 查看视频内容

记忆与任务管理

  • update_memory: 更新长期记忆
  • todo_create: 创建待办任务
  • todo_update_task: 更新任务状态

自定义工具

  • 支持管理员定义自定义工具
  • 工具注册和执行框架
  • 动态工具加载

💾 对话持久化

完整的对话管理系统:

  • 多对话支持: 创建、切换、删除多个独立对话
  • 自动保存: 对话历史实时持久化
  • 对话搜索: 按标题和内容搜索历史对话
  • 对话复制: 快速复制现有对话作为新起点
  • 元数据追踪: 记录创建时间、消息数、Token 使用等

命令:

  • /new: 创建新对话
  • /load <id>: 加载指定对话
  • /conversations: 列出所有对话
  • /clear: 清空当前对话

🔒 运行环境模式

系统支持两种运行环境模式,各有优势:

宿主机模式 (Host Mode)

直接在宿主机上执行命令和操作,适合开发和个人使用:

  • 原生性能: 无虚拟化开销,执行速度最快
  • 完整访问: 可访问宿主机所有资源和工具
  • 开发友好: 直接使用本地环境和配置
  • 简单部署: 无需 Docker降低部署复杂度
  • 灵活操作: 支持所有系统命令和工具
  • 路径透明: 文件路径与实际系统一致

适用场景:

  • 个人开发环境
  • 可信用户场景
  • 需要完整系统访问权限
  • 性能敏感的任务

配置:

TERMINAL_SANDBOX_MODE=host
HOST_WORKSPACES_FILE=./config/host_workspaces.json

宿主机模式下的安全机制(新增):

  • 执行环境Execution Mode

    • sandbox默认命令在系统级沙箱执行macOS: sandbox-execLinux: bwrap + seccompWindows: WSL2
    • direct:宿主机直接执行(仅建议临时用于必须操作)
    • 仅宿主机管理员可切换,支持会话级 TTL 自动回退到 sandbox
  • 权限模式Permission Mode

    • readonlyrun_command 在只读沙箱执行;写入会被系统拒绝
    • approvalrun_command 先按只读沙箱执行;若遇权限拒绝,再触发前端审批;审批通过后仅该次命令以可写沙箱重试
    • auto_approval:工作区内 write_file/edit_file 直通;高风险操作由后台审批智能体自动审核。run_command 仍先只读执行,遇权限拒绝后再自动审批
    • unrestricted:不做权限模式拦截(仍受执行环境约束)
  • 路径授权Path Authorization

    • 可配置两类路径:可读可写仅可读
    • 语义:可读集合 = 可读可写 + 仅可读可写集合 = 可读可写
    • 默认建议:仅工作区 + 临时目录可写,其余按需白名单
  • 自动审批智能体Auto Approval Agent

    • 配置文件:config/auto_approval.json
    • 核心字段:name / url / key / model / extra_params
    • 调试记录:可在 modules/approval_agent.py 打开 DEBUG_SAVE_APPROVAL_AGENT_TRANSCRIPT,输出到 logs/approval_agent/

HOST_WORKSPACES_FILE 对应 JSON 示例:

{
  "default_workspace_id": "default",
  "workspaces": [
    { "workspace_id": "default", "label": "默认工作区", "path": "./project" },
    { "workspace_id": "my-repo", "label": "我的仓库", "path": "/Users/you/code/my-repo" }
  ]
}

Docker 容器模式 (Docker Mode)

在隔离的 Docker 容器中执行,适合多用户和生产环境:

  • 环境隔离: 每个用户独立的容器环境
  • 资源限制: CPU、内存、存储配额管理
  • 安全执行: 代码在隔离环境中运行,保护宿主机
  • 持久化存储: 项目文件挂载到容器
  • 网络控制: 可配置网络访问策略
  • 环境一致: 统一的运行环境,避免依赖问题

适用场景:

  • 多用户共享服务
  • 生产环境部署
  • 需要安全隔离
  • 资源配额管理

配置:

TERMINAL_SANDBOX_MODE=docker
TERMINAL_SANDBOX_IMAGE=ubuntu:22.04
TERMINAL_SANDBOX_CPUS=2
TERMINAL_SANDBOX_MEMORY=4g
TERMINAL_SANDBOX_MOUNT_PATH=/workspace

模式对比

特性 宿主机模式 Docker 模式
性能
安全隔离
资源控制
部署复杂度
环境一致性
工具访问

🔐 宿主机安全边界总览

在宿主机模式下,安全边界分两层:

  1. 权限模式(产品层):决定是否允许执行、是否需要审批、是否使用只读沙箱优先策略。
  2. 执行环境(系统层):决定命令最终在 sandbox 还是 direct 运行。

推荐默认:

  • 执行环境:sandbox
  • 权限模式:approval(通用)或 readonly(高保守)

详细机制文档见:docs/host_sandbox_and_permission_model.md

👥 多用户管理

完整的用户系统:

  • 用户认证: 基于 Session 的身份验证
  • 权限管理: 普通用户 / 管理员角色
  • 配额控制: 按用户限制 API 调用次数
  • 工作空间隔离: 每个用户独立的数据目录
  • 使用统计: 追踪用户活动和资源使用

🎨 个性化配置

用户可自定义智能体行为:

  • 身份设定: 自定义智能体名称和用户称呼
  • 语气风格: 健谈、幽默、直言不讳、鼓励性等预设
  • 工具偏好: 选择性启用/禁用工具类别
  • 模型选择: 切换不同的 AI 模型
  • 思考间隔: 调整思考模式的输出频率
  • 图片压缩: 控制图片上传质量

📊 监控与统计

实时系统监控:

  • Token 统计: 输入/输出 Token 使用量
  • 工具调用: 各工具使用频率统计
  • 文件操作: 读写操作记录
  • 记忆使用: 记忆系统活动追踪
  • 性能指标: 响应时间、错误率等

架构设计

后端架构

agents/
├── main.py                 # 程序入口
├── core/                   # 核心模块
│   ├── main_terminal.py    # 主终端CLI模式
│   ├── web_terminal.py     # Web终端
│   ├── tool_config.py      # 工具配置
│   └── ...
├── server/                 # Web服务器
│   ├── app.py              # Flask应用
│   ├── chat_flow_*.py      # 对话流程处理
│   ├── conversation.py     # 对话管理
│   ├── socket_handlers.py  # Socket.IO 连接与兼容事件处理(聊天主链路已迁移到 REST 任务轮询)
│   └── ...
├── modules/                # 功能模块
│   ├── file_manager.py     # 文件管理
│   ├── terminal_manager.py # 终端管理
│   ├── sub_agent_manager.py# 子智能体管理
│   ├── memory_manager.py   # 记忆管理
│   ├── search_engine.py    # 搜索引擎
│   └── ...
├── utils/                  # 工具函数
│   ├── api_client.py       # API客户端
│   ├── context_manager.py  # 上下文管理
│   ├── conversation_manager.py # 对话持久化
│   └── ...
└── config/                 # 配置文件
    ├── __init__.py         # 主配置
    ├── model_profiles.py   # 模型配置
    ├── limits.py           # 限制配置
    └── ...

前端架构

static/src/
├── App.vue                 # 主应用组件
├── main.ts                 # 入口文件
├── app/                    # 应用逻辑
│   ├── state.ts            # 状态管理
│   ├── methods/            # 方法模块
│   │   ├── conversation.ts # 对话管理
│   │   ├── message.ts      # 消息处理
│   │   ├── tooling.ts      # 工具调用
│   │   └── ...
│   └── ...
├── components/             # UI组件
│   ├── ConversationSidebar.vue
│   ├── MessageList.vue
│   ├── ToolCallDisplay.vue
│   └── ...
├── composables/            # 组合式函数
│   ├── useMarkdownRenderer.ts
│   ├── useScrollControl.ts
│   └── ...
└── stores/                 # Pinia状态管理
    └── ...

数据流

  1. 用户输入 → REST APIWeb/CLI
  2. 消息处理 → ContextManager 构建上下文
  3. API 调用 → DeepSeekClient 发送请求
  4. 流式响应 → 实时解析工具调用
  5. 工具执行 → 各模块处理具体操作
  6. 结果返回 → 流式输出到前端
  7. 持久化 → ConversationManager 保存历史

使用方法

Web 界面

启动后访问 http://localhost:8091(默认端口)

基本操作

  1. 发送消息: 在输入框输入内容,按 Enter 或点击发送按钮
  2. 创建对话: 点击侧边栏的"新建对话"按钮
  3. 切换对话: 在侧边栏点击历史对话
  4. 删除对话: 右键对话项选择删除
  5. 搜索对话: 使用侧边栏搜索框

工作区面板

  • 文件管理器: 浏览和管理项目文件
  • 终端面板: 查看和交互终端会话
  • 监控面板: 查看系统统计信息

快捷键

  • Ctrl/Cmd + Enter: 发送消息
  • Ctrl/Cmd + K: 聚焦输入框
  • Esc: 停止生成

CLI 模式

通过环境变量设置 WEB_MODE=false 启用 CLI 模式

命令

  • help: 显示帮助信息
  • exit: 退出系统
  • status: 显示系统状态
  • memory: 管理记忆
  • clear: 清空当前对话
  • history: 查看对话历史
  • files: 显示文件列表
  • mode: 切换运行模式
  • terminals: 显示终端列表
  • conversations: 列出所有对话
  • load <id>: 加载指定对话
  • new: 创建新对话

工具使用示例

文件操作

请帮我创建一个 Python 脚本 hello.py内容是打印 Hello World

终端操作

请在终端中运行 npm install 安装依赖

网络搜索

搜索一下 Python 3.12 的新特性

子智能体

请创建一个子智能体帮我分析这个项目的代码结构

模型支持

系统不再内置任何固定供应商模型。可用模型由 config/custom_models.json(或后续 API 扩展配置)动态注册,前后端均通过 /api/v1/models 获取当前模型列表。

每个模型配置应提供 API 地址、密钥、模型 ID、上下文窗口、输出 token 上限、多模态能力和思考模式参数等信息;需要额外请求参数时,通过配置中的 extra_parameter / thinkmode_status.*_extra_parameter 注入。

配置说明

主要配置项(通过环境变量或 .env 文件):

API 配置

  • config/custom_models.json: 动态模型注册文件
  • AGENT_DEFAULT_MODEL: 可选,指定默认模型 key未设置时使用第一个可见动态模型
  • 模型配置中的 url / apikey 支持 ${ENV_NAME}env:ENV_NAME$ENV_NAME 等环境变量引用

服务配置

  • WEB_SERVER_PORT: Web 服务器端口(默认 8091
  • DEFAULT_PROJECT_PATH: 默认项目路径

限制配置

  • MAX_ITERATIONS_PER_TASK: 单任务最大迭代次数
  • MAX_TOTAL_TOOL_CALLS: 总工具调用次数限制
  • MAX_UPLOAD_SIZE: 最大上传文件大小
  • PROJECT_MAX_STORAGE_MB: 项目存储限制

运行环境配置

宿主机模式:

  • TERMINAL_SANDBOX_MODE=host: 启用宿主机模式
  • HOST_WORKSPACES_FILE: 宿主机工作区 JSON 配置文件路径
  • LINUX_SAFETY: Linux 安全保护开关

Docker 模式:

  • TERMINAL_SANDBOX_MODE=docker: 启用容器模式
  • TERMINAL_SANDBOX_IMAGE: Docker 镜像(如 ubuntu:22.04
  • TERMINAL_SANDBOX_CPUS: CPU 限制(如 2
  • TERMINAL_SANDBOX_MEMORY: 内存限制(如 4g
  • TERMINAL_SANDBOX_MOUNT_PATH: 容器内挂载路径
  • TERMINAL_SANDBOX_NETWORK: 网络模式
  • TERMINAL_SANDBOX_BINDS: 额外挂载目录

数据存储

目录结构

data/                       # 数据目录
├── conversations/          # 对话历史
│   └── <conversation_id>.json
├── memory/                 # 记忆文件
│   ├── main_memory.md
│   └── task_memory.md
└── personalization.json    # 个性化配置

logs/                       # 日志目录
├── tasks/                  # 任务日志
├── errors/                 # 错误日志
└── *.log

sub_agent/                  # 子智能体数据
└── tasks/                  # 任务目录
    └── <task_id>/
        ├── task.txt
        ├── output.json
        └── progress.jsonl

users/                      # 用户数据
└── <username>/
    ├── data/
    ├── project/
    └── ...

扩展开发

添加自定义工具

  1. modules/custom_tool_registry.py 注册工具
  2. 实现工具执行逻辑
  3. core/tool_config.py 添加工具定义
  4. 重启系统加载新工具

添加新模型

  1. config/model_profiles.py 添加模型配置
  2. utils/api_client.py 实现 API 调用
  3. 配置环境变量

创建技能包

  1. agentskills/ 目录创建技能文件夹
  2. 编写技能定义和提示词
  3. 在前端注册技能

性能优化

  • 流式输出: 实时显示生成内容
  • 增量上下文: 仅发送必要的上下文
  • 工具结果缓存: 避免重复操作
  • 对话压缩: 自动总结长对话
  • 并发处理: 子智能体并行执行
  • 资源池化: 复用终端会话和容器

故障排查

常见问题

  1. 连接失败: 检查 API 密钥和网络连接
  2. 工具调用失败: 查看日志文件定位错误
  3. 容器启动失败: 检查 Docker 配置和权限
  4. 文件操作失败: 确认路径权限和存储空间
  5. 对话加载失败: 检查数据目录完整性

日志位置

  • 主日志: logs/main.log
  • 错误日志: logs/errors/
  • 任务日志: logs/tasks/
  • Web 服务器: web_server.log

版本信息

当前版本: 4.1.0

主要更新:

  • 完整的对话持久化系统
  • 子智能体并行执行
  • 多模型支持
  • 容器沙箱隔离
  • 个性化配置
  • 监控仪表板

注意: 本系统仅供学习和研究使用,请遵守相关 API 服务商的使用条款。