# AI Agent 系统(v2) 多用户、多终端的智能开发助手。每位登录用户都会获得一个独立 Docker 容器,所有终端、一次性命令以及文件操作都在容器内完成;宿主机仅提供挂载和备份,配合实时监控界面可以随时观察容器 CPU/内存/网络/磁盘配额的使用情况。 > ⚠️ **定位**:学习与实验用项目,主要用于探索“智能体 + 真实 Dev Workflow”。代码大量由 AI 生成,尚未达到生产级别,请谨慎部署。 --- ## 近期亮点 | 能力 | 说明 | | --- | --- | | **单用户-单容器** | `modules/user_container_manager.py` 会在登录时启动专属容器,并在退出或空闲超时后自动销毁。CLI/Web/Toolbox 复用同一容器,资源配额(默认 0.5 vCPU / 1GB RAM / 2GB 磁盘)由 `.env` 控制。 | | **容器内文件代理** | `modules/container_file_proxy.py` 通过 `docker exec` 调用内置 Python 脚本,对 `create/read/search/write/modify` 等操作进行沙箱化处理,宿主机不再直写用户代码。 | | **实时监控面板** | Web “用量统计”抽屉实时展示 Token 消耗、容器 CPU/内存、网络上下行速率(0.5s 刷新)以及项目存储占用(5s 刷新)。CLI `/status` 命令也会附带容器状态。 | | **管理员监控面板** | 管理员身份可在「个人空间」中打开 `/admin/monitor`,集中查看用户用量、容器状态、项目存储与上传审计,支持一键刷新与自动轮询。 | | **联网能力 + 最小工具集** | 终端镜像改为 `bridge` 网络并预装 `iputils-ping`,方便验证网络连通性;遇到受限环境可以随时在 `.env` 中切换网络模式。 | --- ## 架构概览 ``` ┌─────────────┐ ┌────────────────┐ ┌────────────────────────┐ │ Browser │◀───▶│ Flask + Socket │◀───▶│ UserContainerManager │ │ (Vue 前端) │ Web │ Web Server │调度 │ (管理 Docker 容器) │ └─────────────┘ │ ├─ WebTerminal │ └────┬───────────────────┘ │ └─ REST APIs │ │ └────────────────┘ ▼ Container ├─ PersistentTerminal / Toolbox └─ Container File Proxy ``` - **core/**:`MainTerminal` / `WebTerminal` 负责命令路由、上下文管理与工具调度。 - **modules/**:终端管理、FileManager、容器调度、搜索、记忆等独立能力模块。 - **utils/**:模型 API 客户端、上下文压缩、日志、终端工厂等辅助工具。 - **static/**:Vue + Socket.IO 单页应用,负责对话流/终端输出/资源监控。 - **docker/**:终端镜像 Dockerfile 及工具容器依赖清单。 更多目录说明请查阅 `tree -L 2` 或仓库内注释。 --- ## 快速开始 ### 1. 环境需求 - Python 3.11+ - Docker 20+(需启用 cgroup v1/v2 任一,默认通过 `bridge` 网络运行容器) - Node/Vue 非必需,前端为静态文件 ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置 1. 复制 `.env.example` → `.env`,填入以下关键变量: - `AGENT_API_*`:兼容 OpenAI API 的模型服务 - `WEB_SECRET_KEY`:Flask session 密钥 - `TERMINAL_SANDBOX_*`:容器镜像/资源/网络(默认 `my-agent-shell:latest` + `bridge`) 2. 若需定制终端镜像: ```bash docker build -f docker/terminal.Dockerfile -t my-agent-shell:latest . ``` ### 4. 运行 ```bash # CLI 模式 python main.py # Web 模式(默认 8091) python web_server.py ``` 首次启动会在 `users//` 下初始化个人工作区与容器。 --- ## 监控与调试 - **Web 用量面板**:点击右下角「用量统计」可查看 Token/CPU/内存/网络/存储实时状态。 - **CLI `/status`**:显示当前会话、上下文大小、容器资源等,日志位于 `logs/debug_stream.log`。 - **容器日志**:`logs/container_stats.log` 存储 `docker stats/inspect` 样本,可配合 `tail -f` 或外部监控系统。 --- ## 常见命令 | 命令 | 说明 | | --- | --- | | `/help` | CLI 指令列表 | | `/status` | 查看系统/容器资源状态 | | `read_file` / `modify_file` | 读写项目文件(自动通过容器代理) | | `terminal_session` / `terminal_input` | 管理多终端会话 | | `run_command` / `run_python` | 工具容器快速执行命令/Python 代码 | | `todo_*`, `update_memory` | 维护待办与长期记忆 | --- ## 配置速览 `config/terminal.py` 支持以下常用变量: | 变量 | 默认值 | 说明 | | --- | --- | --- | | `TERMINAL_SANDBOX_IMAGE` | `my-agent-shell:latest` | 终端容器镜像 | | `TERMINAL_SANDBOX_NETWORK` | `bridge` | 容器网络模式(`none`/`bridge`/`host` 等) | | `TERMINAL_SANDBOX_CPUS` | `0.5` | 上限 CPU | | `TERMINAL_SANDBOX_MEMORY` | `1g` | 上限内存 | | `TERMINAL_SANDBOX_REQUIRE` | `0` | 若容器启动失败是否降级宿主机模式 | | `PROJECT_MAX_STORAGE_MB` | `2048` | 每个工作区的磁盘配额 | | `MAX_ACTIVE_USER_CONTAINERS` | `8` | 并发容器数量 | 更多配置请查阅 `.env.example`。 --- ## 开发建议 1. **安全**:新增模块前请优先考虑是否可以在容器中实现,避免回退宿主机;如需联网,务必评估外部依赖。上传检测现阶段默认关闭 ClamAV(`UPLOAD_CLAMAV_ENABLED=0`),以免 1GB+ 的常驻内存占用,必要时可以在环境变量中显式打开。 2. **日志**:尽量使用 `utils.logger.setup_logger`,便于统一收集。 3. **测试**:`users//project/test_scripts/` 提供内存压测脚本,可验证容器限制是否生效;可在 `test/` 下添加更多集成测试。 4. **文档**:第二阶段总结见 `doc/phases/phase2_summary.md`,安全基线更新见 `doc/security/security_review.md`。 5. **前端组件化**:`doc/frontend/phase1_setup.md` 与 `doc/frontend/phase2_sidebar.md` 记录了脚手架与侧栏改造,可用以下命令构建体验版 UI;执行 `localStorage.setItem('useNewFrontend','1')` 或设置 `window.__USE_NEW_FRONTEND__ = true` 可加载新入口,移除该键即回退 legacy UI: ```bash npm install npm run dev # watch 构建 static/dist npm run build # 生产包 ``` --- ## Roadmap - [ ] CSRF / 防爆破 / 会话绑定设备指纹 - [ ] 文件上传内容扫描与白名单策略 - [ ] 用户/会话数据迁移到数据库并加密备份 - [ ] 自动化测试与 CI(含容器镜像构建) - [ ] Skeleton Web UI(组件化、国际化、Dark Mode) 欢迎通过 Issue/PR 贡献。