当前 RouterCenter 的定位是比赛母进程:
- 常驻运行,持续同步官方赛题平台
- 按赛区维护固定工作集,调度 Zone Agent
- 开题后立即获取官方 Hint
- 将 Hint 拼进初始 instruction 后启动
tianti - Agent 退出后清理官方实例
- 根据解题数/得分阈值自动开放下一赛区
- 将系统日志、Agent telemetry、stdout/stderr 输出到 Web 前端
不再包含旧的双向控制通道、运行时消息注入、graph 查询、手动 Hint 推送等控制面能力。
安装依赖:
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt启动 RouterCenter:
.venv/bin/python main.pyDashboard 默认地址为 http://127.0.0.1:8081。
mock_adapter
- 本地开发模式
- 不会调用官方比赛平台
official_adapter
- 比赛模式
base_url会自动规范到http://<SERVER_HOST>/api- 认证头为
Agent-Token: <AGENT_TOKEN> - 已实现:
GET /api/challengesPOST /api/start_challengePOST /api/stop_challengePOST /api/submitPOST /api/hint
- 自动解析官方
{code, message, data}响应 - 内置
3 req/s限速 - 对
429做退避重试
示例 config/default.toml:
[api]
adapter = "official_adapter"
base_url = "http://<SERVER_HOST>"
token = "<AGENT_TOKEN>"在官方模式下,调度链路如下:
GET /api/challenges- 计算每个赛区的工作集(默认 3 题)
POST /api/start_challengePOST /api/hint- 将返回的 Hint 拼进初始 instruction
- 使用拼好的 instruction 启动
tianti tianti退出后调用POST /api/stop_challenge- 心跳同步远端当前解题状态、分数和实例状态
- 满足阈值后自动激活下一区
重要行为:
- 不再依赖题目列表里预先带出
target_url start_challenge返回already_completed时,会直接标记本地题目为已完成,不再启动 agent- Hint 只在启动前主动读取一次
- 每个赛区默认维护固定三题工作集,解开一题后会自动补位
- 心跳同步会持续拉取当前题目地址、
flag_count/flag_got_count、得分和实例状态
推荐的 zone 模板:
[[zone]]
name = "zone_1"
agent_template = "poetry -C '/path/to/TianTi-Agent-Zone1' run tianti --target {target_url} --instruction {instruction}"
max_concurrency = 2RouterCenter 启动 agent 时会注入以下环境变量:
CTF_ZONECTF_CHALLENGE_IDCTF_INSTANCE_IDCTF_INSTRUCTIONCTF_TARGET_URL
其中 CTF_INSTRUCTION 已经包含原始题面 instruction 和启动前读取到的官方 Hint。
同时还会注入:
TIANTI_RUNS_DIR
tianti 将 events.jsonl 写入该目录后,RouterCenter 会自动追踪并转发到 Dashboard。
config/runtime.toml 控制初始激活赛区和显式晋级规则:
[zones]
active = ["zone_1"]
[[unlock]]
after_zone = "zone_1"
target_zone = "zone_2"
min_solved = 1config/default.toml 中的策略配置:
dispatch.max_concurrencydispatch.activation_interval_secdispatch.health_interval_secpolicy.per_zone_working_set_sizepolicy.priority_modepolicy.auto_unlock_nextpolicy.default_unlock_solved_countpolicy.default_unlock_scorepolicy.agent_log_tail_lines
config/agents.toml 保留启动模板相关配置:
nameagent_templatemax_concurrencyenv
当前 dashboard 提供:
- 赛区激活
- 赛区工作集、解题数、得分、心跳状态查看
- 自动晋级规则状态查看
- 题目与 agent 状态查看
agent_template在线编辑与热加载- agent 进程终止
- Agent telemetry / stdout / stderr 查看
- 系统日志查看
运行测试:
.venv/bin/python -m unittest discover -s tests -v当前覆盖点包括:
- 官方 adapter 的挑战列表、启动、Hint 获取、停止、重试与错误处理
- RouterCenter 在启动前预取 Hint 并注入 instruction
- RouterCenter 的固定工作集与自动解锁策略
- agent 退出后的平台实例回收
- dashboard 的赛区激活、agent kill、日志接口与模板更新接口