agent-Specialization/.env.example
JOJO b8a51c1c63 refactor(config): 移除硬编码模型残留,部署级配置外置到 ~/.agents
## 模型逻辑清理
早期把模型 API 端点/密钥/模型 ID 硬编码的残留(AGENT_API_* / THINKING_* /
TITLE_* 三件套)已彻底移除。模型配置统一由 config/custom_models.json
(经 model_profiles 解析为档案)描述,运行时通过 apply_profile 注入;
没有任何可用模型时按既定行为报错。

- config/api.py: 删 9 个三件套符号,仅保留 DEFAULT_RESPONSE_MAX_TOKENS
- utils/api_client.py: client 改为空配置起步,移除三件套 import
- server/chat_flow_helpers.py: 删死 import(TITLE_* 符号)

## 部署级配置外置(按"决策权归谁"分类)
config/*.json 不再一概锚定源码树:
- 程序能力(docker_risk_markers / skill_hints)留源码树,随版本演进
- 部署者自定义(custom_models / host_workspaces / auto_approval /
  goal_review / forbidden_commands / host_sandbox_policy)外置到
  ~/.agents/<mode>/config/

新增统一解析机制(config/paths.py):
- DEPLOY_CONFIG_DIR(默认 ~/.agents/<mode>/config,可用环境变量覆盖)
- resolve_deploy_config():只读,回退链 部署目录→源码树.json→源码树.example
  (开发环境不必先跑 setup 也能用源码树种子)
- deploy_config_path():写回用,稳定指向部署目录

6 个加载点改用上述解析;顺带修复 approval_agent / goal_review_agent 的
DEBUG_TRANSCRIPT_DIR 仍指旧源码树 logs/ 的漏迁问题。

## 安全与运维
- 含密钥/机器特定的 5 个文件停止 git 追踪(git rm --cached,本地保留)
  并加入 .gitignore,仓库仅留 .example 种子;forbidden_commands 保留
  追踪作默认黑名单
- scripts/setup.py: 模型配置写到部署目录(用与 paths 一致的独立推导,
  不 import config 以免过早锁定路径)
- scripts/migrate_runtime_data.py: 新增 config/*.json → 部署目录迁移
  (备份 + 不覆盖已存在)

## 关联:P1 配置收敛 + P2 首启向导
- config/server.py: Web 端口/监听地址/debug/NODE_BIN/PYTHON_BIN 单一事实源
- 消灭 8091 多处重复定义(state.py 死代码、app_legacy、main.py 各读各的)
- 修复 sub_agent_manager 命令数组硬编码 "node" → NODE_BIN(便携包内置
  Node 的前提)
- scripts/setup.py: 终端首启向导(模式/端口/管理员/密钥/模型)

## 测试
test_config_paths_resolution 更新以反映新行为(host_workspaces 锚定部署
目录、新增 DEPLOY_CONFIG_DIR 用例);全部离线用例通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:59:34 +08:00

90 lines
3.5 KiB
Plaintext
Raw 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.

# === API Keys ===============================================================
# 基础推理模型(必填)
AGENT_API_BASE_URL=https://api.example.com
AGENT_API_KEY=your-api-key
AGENT_MODEL_ID=deepseek-chat
# 智能思考模型(可选,留空则回退到基础模型)
AGENT_THINKING_API_BASE_URL=
AGENT_THINKING_API_KEY=
AGENT_THINKING_MODEL_ID=
# 对话标题生成模型(可选,留空则回退到基础推理模型)
AGENT_TITLE_API_BASE_URL=
AGENT_TITLE_API_KEY=
AGENT_TITLE_MODEL_ID=
# 第三方搜索(可选)
AGENT_TAVILY_API_KEY=
AGENT_TAVILY_API_KEY_2=
AGENT_TAVILY_API_KEY_BACKUP=
# 使用哪个 Tavily 环境变量请在 config/search.py 里改 TAVILY_API_KEY_ENV_NAME
# 每轮最大响应 token可选
AGENT_DEFAULT_RESPONSE_MAX_TOKENS=32768
# === 管理员账户 ===============================================================
# 使用 `python - <<'PY' ... generate_password_hash` 生成哈希
AGENT_ADMIN_USERNAME=admin
AGENT_ADMIN_PASSWORD_HASH=
# === Web Session =============================================================
WEB_SECRET_KEY=replace-with-random-hex
# === Web 服务 ================================================================
# 监听端口统一来源main.py / server.app / state 均读取此项)
WEB_SERVER_PORT=8091
# 监听地址:多用户/服务器用 0.0.0.0;单机便携包建议 127.0.0.1 只听本机
WEB_SERVER_HOST=0.0.0.0
# 调试模式(同时控制 Flask reloader生产保持 0
WEB_SERVER_DEBUG=0
# === 运行环境二进制(便携 release 包用,开发环境留默认即可)==================
# 子智能体使用的 node 可执行文件;留 "node" 表示走系统 PATH
AGENT_NODE_BIN=node
# Python 解释器路径;留空表示使用当前进程的 sys.executable
AGENT_PYTHON_BIN=
# === 终端容器沙箱 =============================================================
# 模式docker / host
TERMINAL_SANDBOX_MODE=docker
# 宿主机模式工作区配置JSON 文件)
HOST_WORKSPACES_FILE=./config/host_workspaces.json
# 容器镜像及挂载路径
TERMINAL_SANDBOX_IMAGE=python:3.11-slim
TERMINAL_SANDBOX_MOUNT_PATH=/workspace
TERMINAL_SANDBOX_SHELL=/bin/bash
# 资源与网络限制
TERMINAL_SANDBOX_NETWORK=bridge
TERMINAL_SANDBOX_CPUS=0.5
TERMINAL_SANDBOX_MEMORY=1g
# 附加绑定目录(逗号分隔,可留空)
TERMINAL_SANDBOX_BINDS=
# 运行时路径及容器名称前缀
TERMINAL_SANDBOX_BIN=docker
TERMINAL_SANDBOX_NAME_PREFIX=agent-term
# 启动失败时是否强制报错(建议 1当前实现中 docker 失败会直接报错)
TERMINAL_SANDBOX_REQUIRE=0
# 宿主机执行环境默认模式sandbox / direct建议 sandbox
HOST_EXECUTION_MODE_DEFAULT=sandbox
# direct 模式自动回退秒数600=10分钟0 或 -1 表示不自动回退
HOST_EXECUTION_DIRECT_TTL_SECONDS=600
# macOS 宿主机沙箱:额外可写白名单路径(逗号分隔,默认仅工作区+/tmp
HOST_SANDBOX_MACOS_WRITABLE_PATHS=
# 注入到容器的额外环境变量(以 TERMINAL_SANDBOX_ENV_* 命名)
# 例如TERMINAL_SANDBOX_ENV_HTTP_PROXY=http://127.0.0.1:7890
# === 资源控制 ================================================================
PROJECT_MAX_STORAGE_MB=2048
MAX_ACTIVE_USER_CONTAINERS=8
# === MCP 工具扩展(可选) =====================================================
# 1=启用0=禁用
MCP_TOOLS_ENABLED=1
# MCP 服务配置文件路径(默认 data/mcp_servers.json
MCP_SERVERS_FILE=./data/mcp_servers.json
# MCP 协议版本(默认 2025-06-18
MCP_PROTOCOL_VERSION=2025-06-18
# MCP 默认超时(秒)
MCP_DEFAULT_TIMEOUT_SECONDS=25