Files

1 line
20 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "brucel017/ctalosagent", "files": {"DEPLOYMENT.md": {"c2d0cf9730ba0eb2836cbc9d1d2c187ab3a61765": {"t": 1785674115.2579405, "n": 5667, "h": "d73ef3694843059b", "c": "# Deployment Guide — Enterprise Agent v0.3.1\n\n**Version**: v0.3.1\n**Date**: 2026-04-27\n**Target**: 单服务器 / 小型集群 Docker Compose 部署\n\n---\n\n## 1. 前置条件\n\n| 组件 | 版本 | 说明 |\n|------|------|------|\n| Docker | 24.x+ | 含 docker compose plugin |\n| Docker Compose | 2.x+ | |\n| Git | 2.x+ | 克隆仓库 |\n| 内存 | 4GB+ | 推荐 8GB |\n| 磁盘 | 20GB+ | 含 PostgreSQL 数据 |\n\n---\n\n## 2. 环境准备\n\n### 2.1 克隆仓库\n\n```bash\ngit clone <repo-url> enterprise-agent\ncd enterprise-agent\n```\n\n### 2.2 配置环境变量\n\n```bash\ncp .env.example .env\n```\n\n编辑 `.env`,填入以下必填项:\n\n```bash\n# === Database ===\nDATABASE_URL=postgresql://agent:agent_secret@127.0.0.1:5432/agent_db\n\n# === Security (必须修改默认值) ===\nJWT_SECRET=$(openssl rand -hex 32)\nENCRYPTION_KEY=$(openssl rand -hex 32)\n\n# === LLM Provider (至少配置一个) ===\n# SiliconFlow(推荐,国内可用)\nSILICONFLOW_API_KEY=sk-...\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\nSILICONFLOW_MODEL=Pro/zai-org/GLM-4.7\nDEFAULT_PROVIDER=siliconflow\n\n# 或 OpenAI\n# OPENAI_API_KEY=sk-...\n# DEFAULT_PROVIDER=openai\n\n# === Embedding (可选,不配置则使用 Mock) ===\nSILICONFLOW_EMBEDDING_API_KEY=sk-...\nSILICONFLOW_EMBEDDING_MODEL=Qwen/Qwen3-VL-Embedding-8B\n\n# === GitHub (可选,用于真实 GitHub 集成) ===\nGITHUB_TOKEN=ghp_...\n\n# === 其他可选 ===\nSUPABASE_URL=...\nLARK_APP_ID=...\nTELEGRAM_BOT_TOKEN=...\n```\n\n### 2.3 生成随机密钥\n\n```bash\n# 生成安全的 JWT_SECRET 和 ENCRYPTION_KEY\nopenssl rand -hex 32\n```\n\n---\n\n## 3. Docker Compose 部署(推荐)\n\n### 3.1 一键启动\n\n```bash\ndocker compose up --build -d\n```\n\n### 3.2 执行数据库迁移\n\n```bash\ndocker compose exec postgres psql -U agent -d agent_db -f /migrations/001_initial_schema.sql\ndocker compose exec postgres psql -U agent -d agent_db -f /migrations/002_state_machine_subagents.sql\ndocker compose exec postgres psql -U agent -d agent_db -f /migrations/003_sessions_and_memory_scope.sql\ndocker compose exec postgres psql -U agent -d agent_db -f /migrations/004_workflow_states.sql\n```\n\n### 3.3 验证部署\n\n```bash\n# API Server\ncurl http://localhost:3001/health\n\n# Agent Runtime\ncurl http://localhost:8000/health\n\n# 认证登录\ncurl -X POST http://localhost:3001/api/auth/login \\\n -H \"Content-Type: application/json\" \\\n -d '{\"email\":\"admin@enterprise.local\",\"password\":\"admin123\"}'\n\n# Smoke Test\nbash smoke-test.sh\n```\n\n### 3.4 查看日志\n\n```bash\ndocker compose logs -f api-server\ndocker compose logs -f agent-runtime\ndocker compose logs -f web-console\n```\n\n### 3.5 停止服务\n\n```bash\ndocker compose down\n```\n\n---\n\n## 4. 分步部署(开发/调试)\n\n### 4.1 基础设施\n\n```bash\ndocker compose up -d postgres redis\n```\n\n### 4.2 API Server\n\n```bash\ncd apps/api-server\npnpm install\npnpm dev\n# 或生产模式:pnpm build && pnpm start\n```\n\n### 4.3 Agent Runtime\n\n```bash\ncd apps/agent-runtime\npython -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\ncd src\nuvicorn main:app --reload --host 0.0.0.0 --port 8000\n```\n\n### 4.4 Web Console\n\n```bash\ncd apps/web-console\npnpm install\npnpm dev\n# 或生产模式:pnpm build && pnpm preview\n```\n\n---\n\n## 5. 端口映射\n\n| 服务 | 端口 | 说明 |\n|------|------|------|\n| Web Console | 5173 | 开发 / 80 (Docker) |\n| API Server | 3001 | REST API |\n| Agent Runtime | 8000 | Agent 执行引擎 |\n| PostgreSQL | 5432 | 数据库 |\n| Redis | 6379 | 缓存/队列 |\n\n---\n\n## 6. 生产环境额外配置\n\n### 6.1 反向代理(Nginx)\n\n```nginx\nserver {\n listen 80;\n server_name agent.example.com;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl;\n server_name agent.example.com;\n\n ssl_certificate /path/to/cert.pem;\n ssl_certificate_key /path/to/key.pem;\n\n location / {\n proxy_pass http://localhost:5173;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n }\n\n location /api/ {\n proxy_pass http://localhost:3001;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n }\n}\n```\n\n### 6.2 HTTPS\n\n建议使用 Let's Encrypt + certbot 自动管理证书。\n\n### 6.3 防火墙\n\n```bash\n# 仅暴露必要端口\nsudo ufw allow 80/tcp\nsudo ufw allow 443/tcp\n# 如需直接访问(不推荐):\n# sudo ufw allow 3001/tcp\n# sudo ufw allow 8000/tcp\n```\n\n### 6.4 资源限制\n\n编辑 `docker-compose.yml` 添加资源限制:\n\n```yaml\nservices:\n agent-runtime:\n deploy:\n resources:\n limits:\n memory: 2G\n reservations:\n memory: 512M\n```\n\n---\n\n## 7. 升级流程\n\n### 7.1 滚动升级(推荐)\n\n```bash\n# 1. 拉取最新代码\ngit pull origin main\n\n# 2. 备份数据库(见 BACKUP_RESTORE.md)\n\n# 3. 查看是否有新 migration\nls packages/db-schema/migrations/\n\n# 4. 如有新 migration,先执行\n# docker compose exec postgres psql -U agent -d agent_db -f /migrations/00X_xxx.sql\n\n# 5. 重新构建并启动\ndocker compose down\ndocker compose up --build -d\n\n# 6. 验证\nbash smoke-test.sh\n```\n\n### 7.2 回滚\n\n```bash\n# 回滚到上一个镜像\ndocker compose down\ndocker image ls | grep enterprise-agent\n# docker tag <old-image> enterprise-agent:latest\ndocker compose up -d\n```\n\n---\n\n## 8. 故障排查\n\n### 8.1 容器无法启动\n\n```bash\ndocker compose logs <service>\ndocker compose ps\n```\n\n### 8.2 数据库连接失败\n\n```bash\n# 检查 PostgreSQL 健康状态\ndocker compose exec postgres pg_isready -U agent -d agent_db\n# 检查 migration 是否执行\ndocker compose exec postgres psql -U agent -d agent_db -c \"\\\\dt\"\n```\n\n### 8.3 Provider 调用失败\n\n```bash\ncurl http://localhost:8000/providers/health\ncurl http://localhost:8000/providers/stats\n```\n\n---\n\n## 9. 验证清单\n\n部署完成后,确认以下检查项:\n\n- [ ] `docker compose ps` 所有服务状态为 `Up`\n- [ ] `curl http://localhost:3001/health` 返回 `{\"status\":\"ok\"}`\n- [ ] `curl http://localhost:8000/health` 返回 `{\"status\":\"ok\"}`\n- [ ] 登录 `/api/auth/login` 成功返回 JWT\n- [ ] `bash smoke-test.sh` 20 步全部通过\n- [ ] Web Console 可以正常访问和登录\n- [ ] Provider 页面显示健康状态\n- [ ] 创建并执行测试任务成功\n\n---\n\n## 10. 云部署参考\n\n### AWS ECS / EKS\n\n- 使用 RDS PostgreSQL + ElastiCache Redis\n- Agent Runtime 和 API Server 作为独立 Service\n- Web Console 静态文件托管到 S3 + CloudFront\n\n### 阿里云\n\n- RDS PostgreSQL + Redis\n- ECS 部署 Docker Compose\n- SLB 负载均衡\n\n### 腾讯云\n\n- TDSQL-C PostgreSQL + Redis\n- CVM 部署\n- CLB 负载均衡\n"}}, ".env.example": {"c2d0cf9730ba0eb2836cbc9d1d2c187ab3a61765": {"t": 1785745148.0398607, "n": 1727, "h": "28b4f776d5ab7a2f", "c": "# =====================================================\n# Enterprise Agent v0.2 - Environment Configuration\n# =====================================================\n\n# Database\nDATABASE_URL=postgresql://agent:agent_secret@127.0.0.1:5432/agent_db\n\n# Redis\nREDIS_URL=redis://127.0.0.1:6379\n\n# API Server\nAPI_SERVER_URL=http://127.0.0.1:3001\nAPI_SERVER_PORT=3001\n\n# Agent Runtime\nAGENT_RUNTIME_URL=http://127.0.0.1:8000\nAGENT_RUNTIME_PORT=8000\n\n# Model Provider API Keys\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nGOOGLE_API_KEY=...\nDEEPSEEK_API_KEY=sk-...\nZHIPU_API_KEY=...\nMOONSHOT_API_KEY=sk-...\nSILICONFLOW_API_KEY=sk-...\n\n# Default Provider & Model\nDEFAULT_PROVIDER=openai\nDEFAULT_MODEL=gpt-4o\n\n# SiliconFlow (OpenAI-compatible,国内易获取)\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\nSILICONFLOW_MODEL=Pro/zai-org/GLM-4.7\n\n# SiliconFlow Embedding\nSILICONFLOW_EMBEDDING_API_KEY=sk-...\nSILICONFLOW_EMBEDDING_MODEL=Qwen/Qwen3-VL-Embedding-8B\nSILICONFLOW_EMBEDDING_BASE_URL=https://api.siliconflow.cn/v1\n\n# GitHub\nGITHUB_TOKEN=ghp_...\nGITHUB_DEFAULT_REPO=owner/repo\n\n# GitLab\nGITLAB_TOKEN=glpat-...\nGITLAB_URL=https://gitlab.com\n\n# Supabase\nSUPABASE_URL=https://xxxx.supabase.co\nSUPABASE_SERVICE_KEY=eyJ...\nSUPABASE_ANON_KEY=eyJ...\n\n# Lark\nLARK_APP_ID=cli_...\nLARK_APP_SECRET=...\nLARK_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/...\n\n# Telegram\nTELEGRAM_BOT_TOKEN=...\nTELEGRAM_DEFAULT_CHAT_ID=...\n\n# MCP\nMCP_DEFAULT_SERVER=filesystem\n\n# Security\nJWT_SECRET=change-this-to-a-random-string-at-least-32-chars\nENCRYPTION_KEY=change-this-to-another-random-string-32-chars\n\n# Logging\nLOG_LEVEL=INFO\n\n# Adapters\nUSE_REAL_ADAPTERS=false\n\n# Artifacts directory (local development)\nARTIFACTS_DIR=/tmp/agent_artifacts\n"}, "3eabe0103e956086a855566bca28e2ccfc02ec4b": {"t": 1785748182.3254578, "n": 1727, "h": "28b4f776d5ab7a2f", "c": "# =====================================================\n# Enterprise Agent v0.2 - Environment Configuration\n# =====================================================\n\n# Database\nDATABASE_URL=postgresql://agent:agent_secret@127.0.0.1:5432/agent_db\n\n# Redis\nREDIS_URL=redis://127.0.0.1:6379\n\n# API Server\nAPI_SERVER_URL=http://127.0.0.1:3001\nAPI_SERVER_PORT=3001\n\n# Agent Runtime\nAGENT_RUNTIME_URL=http://127.0.0.1:8000\nAGENT_RUNTIME_PORT=8000\n\n# Model Provider API Keys\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nGOOGLE_API_KEY=...\nDEEPSEEK_API_KEY=sk-...\nZHIPU_API_KEY=...\nMOONSHOT_API_KEY=sk-...\nSILICONFLOW_API_KEY=sk-...\n\n# Default Provider & Model\nDEFAULT_PROVIDER=openai\nDEFAULT_MODEL=gpt-4o\n\n# SiliconFlow (OpenAI-compatible,国内易获取)\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\nSILICONFLOW_MODEL=Pro/zai-org/GLM-4.7\n\n# SiliconFlow Embedding\nSILICONFLOW_EMBEDDING_API_KEY=sk-...\nSILICONFLOW_EMBEDDING_MODEL=Qwen/Qwen3-VL-Embedding-8B\nSILICONFLOW_EMBEDDING_BASE_URL=https://api.siliconflow.cn/v1\n\n# GitHub\nGITHUB_TOKEN=ghp_...\nGITHUB_DEFAULT_REPO=owner/repo\n\n# GitLab\nGITLAB_TOKEN=glpat-...\nGITLAB_URL=https://gitlab.com\n\n# Supabase\nSUPABASE_URL=https://xxxx.supabase.co\nSUPABASE_SERVICE_KEY=eyJ...\nSUPABASE_ANON_KEY=eyJ...\n\n# Lark\nLARK_APP_ID=cli_...\nLARK_APP_SECRET=...\nLARK_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/...\n\n# Telegram\nTELEGRAM_BOT_TOKEN=...\nTELEGRAM_DEFAULT_CHAT_ID=...\n\n# MCP\nMCP_DEFAULT_SERVER=filesystem\n\n# Security\nJWT_SECRET=change-this-to-a-random-string-at-least-32-chars\nENCRYPTION_KEY=change-this-to-another-random-string-32-chars\n\n# Logging\nLOG_LEVEL=INFO\n\n# Adapters\nUSE_REAL_ADAPTERS=false\n\n# Artifacts directory (local development)\nARTIFACTS_DIR=/tmp/agent_artifacts\n"}}, "SECURITY.md": {"c2d0cf9730ba0eb2836cbc9d1d2c187ab3a61765": {"t": 1785747302.0703235, "n": 2812, "h": "8bab0f035c48805c", "c": "# Security Policy — Enterprise Agent\n\n## 支持的版本\n\n| 版本 | 支持状态 |\n|------|---------|\n| v0.3.1 (RC) | 当前版本,接受安全报告 |\n| < v0.3.0 | 不再支持 |\n\n## 报告漏洞\n\n如果你发现了安全漏洞,请通过以下方式私下报告:\n\n1. 不要在公开的 Issue 或 Pull Request 中披露漏洞细节\n2. 发送邮件至项目维护者(或在 GitHub Security Advisory 中提交)\n3. 提供复现步骤、影响范围和建议修复方案\n\n我们承诺在收到报告后 72 小时内确认,并在 14 天内提供修复计划或说明。\n\n## 不要提交真实 Secret\n\n**严禁**将以下任何内容提交到本仓库:\n\n- API keys(OpenAI、Anthropic、Google、DeepSeek、SiliconFlow 等)\n- GitHub / GitLab personal access tokens\n- JWT secret、encryption key、database password\n- Telegram bot token、Lark app secret\n- Supabase service key / anon key\n- 私钥、SSH key、OAuth client secret\n\n提交前请执行:\n\n```bash\n# 确认没有 .env 被跟踪\ngit status\n\n# 确认没有真实 secret 在代码中\ngrep -r \"sk-\" apps/ --include=\"*.py\" --include=\"*.ts\" --include=\"*.js\"\ngrep -r \"ghp_\" apps/ --include=\"*.py\" --include=\"*.ts\" --include=\"*.js\"\n```\n\n如果不小心提交了 secret:\n\n1. **立即 rotate(撤销/轮换)该 key** — 不要只做 git revert\n2. 如果已 push 到远程,需要重写 git history 或删除仓库后重建\n3. 联系服务提供商确认该 key 的使用记录\n\n## 生产部署安全建议\n\n### 1. Secret 管理\n\n| 配置项 | 开发占位符 | 生产要求 |\n|--------|-----------|---------|\n| JWT_SECRET | `change-this-to-a-random-string-at-least-32-chars` | 随机生成 ≥256-bit,存入 Vault |\n| ENCRYPTION_KEY | `change-this-to-another-random-string-32-chars` | HashiCorp Vault / AWS KMS / 阿里云 KMS |\n| 各 Provider API Key | `sk-...` 占位符 | Vault / Secret Manager |\n| Database Password | `agent_secret` | 强密码 + 网络隔离 |\n\n### 2. 密码存储\n\n- **当前(MVP)**:PBKDF2(Node.js crypto,10000 轮,sha512)\n- **生产要求**:bcrypt + salt,强制用户修改默认密码\n- 默认开发密码 `admin123` **仅限本地 demo**,生产必须更换\n\n### 3. Session 管理\n\n- **当前**:localStorage 存储 JWT + localStorage XSS 风险\n- **生产要求**:httpOnly + secure cookie + refresh token + CSRF 防护\n\n### 4. 网络层\n\n- 使用 HTTPS/TLS(Let's Encrypt / Cloudflare)\n- Nginx 反向代理 + rate limit\n- CORS 白名单(不要 `*`)\n- 防火墙限制数据库端口(5432、6379)仅内网访问\n\n### 5. 审计与监控\n\n- 启用 `audit_logs` 表的全量记录\n- 定期审查 `approvals` 表中异常审批\n- Prometheus `/metrics` 接入告警系统(PagerDuty / OpsGenie)\n- 日志聚合(ELK / Loki)+ 保留策略\n\n### 6. 数据库安全\n\n- PostgreSQL 使用 SSL 连接\n- 独立数据库用户,最小权限原则\n- 定期 `pg_dump` 备份,异地存储\n- Redis 启用 AUTH + 网络隔离\n\n### 7. 工具权限\n\n- 生产环境高风险工具强制审批(已默认启用)\n- MCP Server 默认不可信,白名单校验(已默认启用)\n- Secret 传输自动脱敏(已默认启用)\n- 无 rollback_plan 的高风险任务禁止执行(已默认启用)\n\n## 已知安全限制(MVP)\n\n| 限制 | 风险 | 缓解措施 |\n|------|------|---------|\n| PBKDF2 非 bcrypt | 密码破解 | 团队试运行可控,GA 前升级 |\n| JWT 无 refresh token | 24h 后需重新登录 | 手动重新登录 |\n| 无 rate limit | 可能被滥用 | Nginx 层限制 |\n| 依赖漏洞未自动扫描 | 供应链风险 | 手动 `npm audit` / `pip audit` |\n| CORS 开发模式较宽松 | CSRF | 生产收紧为白名单 |\n\n## 安全事件响应\n\n### Secret 泄露\n\n1. 立即轮换泄露的 API key\n2. 检查 `task_events` 和 `tool_calls` 中是否存在未脱敏的 secret\n3. 更新 `SECRET_PATTERNS` 防止类似泄露\n4. 审查 `audit_logs` 确认泄露范围\n\n### 权限绕过\n\n1. 检查 `approvals` 表中异常审批记录\n2. 审查 `task_state_transitions` 中的状态变更\n3. 回滚可疑任务:`POST /api/tasks/:id/rollback`\n\n### 入侵响应\n\n1. 立即撤销所有 JWT(更换 JWT_SECRET)\n2. 检查 `audit_logs` 和 `task_events` 的异常模式\n3. 隔离受影响的 Agent Runtime 实例\n4. 从最近一次 clean 备份恢复数据\n"}, "3eabe0103e956086a855566bca28e2ccfc02ec4b": {"t": 1785748182.9834154, "n": 2812, "h": "8bab0f035c48805c", "c": "# Security Policy — Enterprise Agent\n\n## 支持的版本\n\n| 版本 | 支持状态 |\n|------|---------|\n| v0.3.1 (RC) | 当前版本,接受安全报告 |\n| < v0.3.0 | 不再支持 |\n\n## 报告漏洞\n\n如果你发现了安全漏洞,请通过以下方式私下报告:\n\n1. 不要在公开的 Issue 或 Pull Request 中披露漏洞细节\n2. 发送邮件至项目维护者(或在 GitHub Security Advisory 中提交)\n3. 提供复现步骤、影响范围和建议修复方案\n\n我们承诺在收到报告后 72 小时内确认,并在 14 天内提供修复计划或说明。\n\n## 不要提交真实 Secret\n\n**严禁**将以下任何内容提交到本仓库:\n\n- API keys(OpenAI、Anthropic、Google、DeepSeek、SiliconFlow 等)\n- GitHub / GitLab personal access tokens\n- JWT secret、encryption key、database password\n- Telegram bot token、Lark app secret\n- Supabase service key / anon key\n- 私钥、SSH key、OAuth client secret\n\n提交前请执行:\n\n```bash\n# 确认没有 .env 被跟踪\ngit status\n\n# 确认没有真实 secret 在代码中\ngrep -r \"sk-\" apps/ --include=\"*.py\" --include=\"*.ts\" --include=\"*.js\"\ngrep -r \"ghp_\" apps/ --include=\"*.py\" --include=\"*.ts\" --include=\"*.js\"\n```\n\n如果不小心提交了 secret:\n\n1. **立即 rotate(撤销/轮换)该 key** — 不要只做 git revert\n2. 如果已 push 到远程,需要重写 git history 或删除仓库后重建\n3. 联系服务提供商确认该 key 的使用记录\n\n## 生产部署安全建议\n\n### 1. Secret 管理\n\n| 配置项 | 开发占位符 | 生产要求 |\n|--------|-----------|---------|\n| JWT_SECRET | `change-this-to-a-random-string-at-least-32-chars` | 随机生成 ≥256-bit,存入 Vault |\n| ENCRYPTION_KEY | `change-this-to-another-random-string-32-chars` | HashiCorp Vault / AWS KMS / 阿里云 KMS |\n| 各 Provider API Key | `sk-...` 占位符 | Vault / Secret Manager |\n| Database Password | `agent_secret` | 强密码 + 网络隔离 |\n\n### 2. 密码存储\n\n- **当前(MVP)**:PBKDF2(Node.js crypto,10000 轮,sha512)\n- **生产要求**:bcrypt + salt,强制用户修改默认密码\n- 默认开发密码 `admin123` **仅限本地 demo**,生产必须更换\n\n### 3. Session 管理\n\n- **当前**:localStorage 存储 JWT + localStorage XSS 风险\n- **生产要求**:httpOnly + secure cookie + refresh token + CSRF 防护\n\n### 4. 网络层\n\n- 使用 HTTPS/TLS(Let's Encrypt / Cloudflare)\n- Nginx 反向代理 + rate limit\n- CORS 白名单(不要 `*`)\n- 防火墙限制数据库端口(5432、6379)仅内网访问\n\n### 5. 审计与监控\n\n- 启用 `audit_logs` 表的全量记录\n- 定期审查 `approvals` 表中异常审批\n- Prometheus `/metrics` 接入告警系统(PagerDuty / OpsGenie)\n- 日志聚合(ELK / Loki)+ 保留策略\n\n### 6. 数据库安全\n\n- PostgreSQL 使用 SSL 连接\n- 独立数据库用户,最小权限原则\n- 定期 `pg_dump` 备份,异地存储\n- Redis 启用 AUTH + 网络隔离\n\n### 7. 工具权限\n\n- 生产环境高风险工具强制审批(已默认启用)\n- MCP Server 默认不可信,白名单校验(已默认启用)\n- Secret 传输自动脱敏(已默认启用)\n- 无 rollback_plan 的高风险任务禁止执行(已默认启用)\n\n## 已知安全限制(MVP)\n\n| 限制 | 风险 | 缓解措施 |\n|------|------|---------|\n| PBKDF2 非 bcrypt | 密码破解 | 团队试运行可控,GA 前升级 |\n| JWT 无 refresh token | 24h 后需重新登录 | 手动重新登录 |\n| 无 rate limit | 可能被滥用 | Nginx 层限制 |\n| 依赖漏洞未自动扫描 | 供应链风险 | 手动 `npm audit` / `pip audit` |\n| CORS 开发模式较宽松 | CSRF | 生产收紧为白名单 |\n\n## 安全事件响应\n\n### Secret 泄露\n\n1. 立即轮换泄露的 API key\n2. 检查 `task_events` 和 `tool_calls` 中是否存在未脱敏的 secret\n3. 更新 `SECRET_PATTERNS` 防止类似泄露\n4. 审查 `audit_logs` 确认泄露范围\n\n### 权限绕过\n\n1. 检查 `approvals` 表中异常审批记录\n2. 审查 `task_state_transitions` 中的状态变更\n3. 回滚可疑任务:`POST /api/tasks/:id/rollback`\n\n### 入侵响应\n\n1. 立即撤销所有 JWT(更换 JWT_SECRET)\n2. 检查 `audit_logs` 和 `task_events` 的异常模式\n3. 隔离受影响的 Agent Runtime 实例\n4. 从最近一次 clean 备份恢复数据\n"}}}}