src/agentcompass/runtime/results/store.py 中的 RunStore。详情整理位于 detail.py,摘要构造位于 summary.py,渲染位于 render.py,attempt checkpoint 位于 runtime/attempts/,经过校验的指标类型位于 runtime/metrics/。
结果目录
RunStore 按启动入口预留目录。单次 run 使用:
launch 中的命名请求使用:
临时文件创建在目标文件旁,并通过原子替换写入,不需要长期存在的 staging 目录。疑似敏感的配置会递归脱敏;指标观测、ground truth 和 final answer 属于评测事实,不受配置键脱敏影响。
任务目录使用可读 task ID 和完整 SHA-256 后缀。写入任务结果前
<state> 为 running,之后按所有 attempt 最终问题的最高等级取 fatal、error 或 normal,仅含 warning 的结果属于 normal。移动任务时会同步改写 attempt 记录中相对运行目录的产物路径。复用写入新的运行目录,需要重试 attempt 的任务放在 running/。新输出没有 task 层 result.json,也不使用错误文件名前缀。共享字段保存在 task.json,各 attempt 独立保存结果。attempt 映射必须使用 attempt-<n>。旧目录结构和复用支持情况见 Legacy。
结果层级
每一层结果都有明确的生成方和职责:
每个持久化 attempt 始终包含
status、metrics、final_answer、trajectory、error、artifacts、analysis_result 以及 meta.benchmark/meta.harness。可选命名空间的内容可以为空,但字段本身会保留。各 attempt 的 result.json 保存自身 retry_count;逻辑任务的总数和 retry_counts 在读取时计算。
MetricReport 保存解析后的 attempt 计划及指标序列。计数满足 evaluated + unavailable + invalidated = total,error 是可重叠的诊断。ERROR 可保留有效观察;最终 FATAL 使整题所有指标失效、设置 evaluation_failed=true,所有正式 value 均为空。reference_value 仅使用有效题并明确覆盖范围;缺失观察不自动补零。
Resume 与 Reuse
Resume 和 reuse 使用相同的持久化记录,但来源选择不同:- Resume 读取当前运行目录中已有的详情与 attempt checkpoints。
- Reuse 通过
reuse_run_id或同一输出命名空间中的最新运行解析另一个来源,验证兼容性后,再把可用详情和 checkpoints 复制到新的运行目录。
execution.attempts 计划相同。任务按 task ID 匹配,checkpoint 按 attempt 序号匹配;不比较请求参数或任务输入指纹,因此待执行的 fresh 评测可以使用更新后的评测设置。完整结果仍沿用现有复用行为。
当前 run-info v3 使用结构化 issues。旧 v2 结果只在读取边界转换;分类未知的旧失败不能复用为新协议有效评分,不修改历史目录。
完整、兼容且不含错误的详情会整体复制。含运行或评测错误的详情不会整体复用,其 k 次尝试计划会重新调度。fresh 模式的 attempt 如果有 agent 正常完成后的记录,可以从产物恢复评测;否则重新执行 agent。
如果中断的来源任务尚无完整详情,则分别物化兼容的 attempt checkpoint。例如,k=3 在中断前完成了 attempt 1 和 2,resume 或 reuse 只会调度 attempt 3,再用三次结果生成最终详情。同一次 attempt 内的 runtime retry 也不会重做已经完成的同任务 attempt。
被物化 attempt 的已解析执行计划也会复制到目标 run_info.json,使新运行保持自包含。Benchmark ID、attempt plan 或 task/attempt 身份不兼容,或需要读取的详情、checkpoint 格式无效时,会明确失败,而不会被静默转换。
修改检查项
- 每个选中任务的
task_id必须稳定、非空且唯一。 - attempt 观测写入
metrics,Benchmark 证据写入meta.benchmark,Harness 诊断写入meta.harness.telemetry。 - 保留原子写入、任务/attempt 身份校验、产物完整性校验、retry 隔离和逐 attempt checkpoint。
- 同时验证全新运行和中断后的
k>1运行。 - 保持每个
MetricSeries.counts与该 series 的实际分母一致。
