1 line
20 KiB
JSON
1 line
20 KiB
JSON
{"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"}}}} |