Skip to content

feat: Sandbox SubAgent — Docker 容器隔离执行#20

Open
robscc wants to merge 1 commit intomainfrom
feat/sandbox-sub-agent
Open

feat: Sandbox SubAgent — Docker 容器隔离执行#20
robscc wants to merge 1 commit intomainfrom
feat/sandbox-sub-agent

Conversation

@robscc
Copy link
Owner

@robscc robscc commented Mar 18, 2026

Summary

  • SandboxManager (sandbox/manager.py):封装 Docker 容器生命周期管理(创建/复用/命令执行/文件读写/过期清理),所有 Docker SDK 调用通过 run_in_executor 异步化
  • SandboxAgent (agents/sandbox_agent.py):继承 SubAgent,覆盖 _build_toolkit()(加载沙箱工具集)和 _build_sub_system_prompt()(注入容器环境说明),惰性创建 Docker 容器并拷贝 workspace 上下文文件
  • 派遣集成builtin.pypersonal_assistant.pydispatch_sub_agent 自动检测 sandbox_config,按需实例化 SandboxAgent 或普通 SubAgent

新增文件

文件 说明
sandbox/__init__.py 包入口
sandbox/manager.py Docker 容器生命周期管理
sandbox/tools.py 容器内版本的 shell/read/write/edit/python/time 工具
agents/sandbox_agent.py 沙箱 SubAgent(继承 SubAgent)

修改文件

文件 变更
pyproject.toml 添加 docker>=7.0.0 依赖
config.py 添加 sandbox_enabled/image/memory_limit 配置
models/agent.py SubAgentDefinition 新增 sandbox_config
database.py 新增 sandbox_config 列迁移
agents/registry.py 注册 sandbox 默认角色 + CRUD 支持 sandbox_config
tools/builtin.py dispatch 检测 sandbox 类型
agents/personal_assistant.py dispatch 检测 sandbox 类型
main.py lifespan 关闭时清理 72h 过期容器

Test plan

  • 45 个新增单元测试全部通过(SandboxManager 23 + SandboxAgent 22)
  • 全量 457 个测试(unit + integration)通过,无回归
  • 手动 E2E:启动后端 → dispatch sandbox 任务 → 验证容器创建/命令执行/文件生成

🤖 Generated with Claude Code

新增 sandbox 类型 SubAgent,自动创建 Docker 容器作为隔离执行环境,
在容器内执行命令/文件操作,任务完成后容器数据保留。

主要变更:
- SandboxManager:封装 Docker 容器生命周期(创建/复用/执行/清理)
- SandboxAgent:继承 SubAgent,覆盖工具集和系统提示词
- 沙箱工具集:容器内版本的 shell/read/write/edit/python 工具
- 默认注册 sandbox 角色(accepted_task_types: sandbox/system_analysis/experiment/benchmark)
- 派遣集成:builtin.py + personal_assistant.py 自动检测 sandbox_config
- 生命周期:lifespan 关闭时清理 72h 过期容器
- 45 个单元测试全部通过,总测试 457 通过

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
robscc added a commit that referenced this pull request Mar 19, 2026
…ds (#20)

## Summary
实现模块化 Agent 运行时架构,支持可插拔的执行后端:
- 定义标准化的运行时接口(BaseSubAgentRuntime)
- 内置 InternalSubAgentRuntime(进程内执行)和 HTTPSubAgentRuntime(远程 RPC)
- 运行时注册表机制,支持动态扩展
- 集成 dispatch_sub_agent,支持通过 runtime_type 选择后端

## Backend Changes
- **agentpal/runtimes/**: 新增运行时核心模块
  - `base.py`: RuntimeConfig、ExecutionResult、BaseSubAgentRuntime 基类
  - `internal.py`: 进程内运行时,复用现有 SubAgent 逻辑
  - `http.py`: HTTP RPC 运行时,支持分布式部署
  - `registry.py`: 运行时注册表和工厂函数
- **agentpal/services/task_event_bus.py**: 任务事件总线原型
- **agentpal/models/session.py**: 新增 TaskStatus 枚举和 SubAgentTask.meta 字段
- **agentpal/tools/builtin.py**: 重构 dispatch_sub_agent 使用新运行时架构
- **agentpal/api/v1/endpoints/tasks.py**: 新增任务管理 API 端点
- Tests: 添加单元测试和集成测试

## Frontend Changes
- **src/api/index.ts**: 新增任务相关 API 客户端方法
- **src/pages/TasksPage.tsx**: 增强任务页面功能
- **src/pages/SessionsPage.tsx**: 优化会话展示
- **src/components/TaskArtifactViewer.tsx**: 新增任务产物查看组件
- **src/hooks/useTaskArtifacts.ts**: 新增任务产物拉取钩子

## Testing
- 26 个单元测试全部通过 ✓
- 2 个集成测试验证运行时与数据库集成 ✓
- 代码可正确编译导入 ✓

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
robscc added a commit that referenced this pull request Mar 19, 2026
feat: Modular agent runtime architecture — pluggable execution backends (#20)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant