本地结果查看器
在浏览器里查看本地运行结果。
整份 dataset 跑完,或只跑一题之后,要对照分数、点开轨迹、复制命令,用 Viewer。Jobs 读的是这一份的 .ageval/suite-runs/ 和 .ageval/runs/。平时只看这些本机文件。要分给别人时,打开一份 suite 或一个 job,上传成只读链接,见 快照分享。
Jobs 表可以删掉本地一行 Job(先 preview 路径,再确认)。删掉 Kind 为 suite 的那一行,会把它引用的各次运行一起删掉,不会再以 single 冒出来。不能从 suite 里单独删一次运行。这是删本地结果,不是 Registry 上的删除(ageval results delete 是另一对象)。CLI 对等:ageval jobs delete --local <dataset> --job <id> --yes。
置顶和备注只存在这个浏览器,不写进 evidence / lock / Registry。
打开
# 首次构建前端(生产 ageval view)
cd apps/viewer && pnpm install && pnpm build && cd ../..
ageval view examples/datasets/minimal-demo
# 或
ageval view examples/datasets/minimal-demo --no-browser --port 8765
# 已缓存的 Hub ref(唯一命中不打 Hub)
ageval view official/demo@0.1.0
# 开发:一条命令(能起 Vite 就起;否则打印两行 fallback)
ageval view examples/datasets/minimal-demo --dev --port 8765
# 跑完后深链到该 job / task / run
ageval view examples/datasets/minimal-demo --open /jobs/<id>
# 这个目录里每个 dataset 根
ageval view examples/datasets --no-browser参数是一份 dataset 根,或已经缓存的 registry ref,就只打开这一份。参数是目录、自己又不是 dataset 时,只保留子目录里 ageval.yaml 为 ageval.dataset/1 的那些。其余子项跳过。空目录也能打开。
顶栏是 Datasets、Jobs、Agents、Plugins。多于一份时先落到 Datasets;只有一份时落到 Jobs。Jobs 只显示你选中的那一份。Agents 和 Plugins 列出 CLI 自带的包,再加上 ageval 主目录里安装的包。点开一行是只读的:有 README 就先看 README,然后是清单,有 profiles.yaml 也会列出,旁边是文件树。插件这一行还会列出包里声明的接入点。运行结果仍在 Jobs,不进这棵文件树。
Datasets、Jobs、Agents、Plugins 上,搜索和筛选停在滚动列顶部。Dataset 表按 dataset_id 里的组织拆开。Plugin 和 Agent 表显示描述;来源仍是搜索旁边的筛选项。文件名含 env 且以 .example、.sample、.template 或 .dist 结尾时按文本预览,包括 .env.example。.env、.env.local、.env.production 以及其他 .env.* 不显示内容。路径里有一段叫 credentials 的不提供。
--dev 对着同一套本地 API,并尽量自己拉起 Vite。起不了会在终端打印 pnpm --dir apps/viewer dev。两进程:API 端口(默认 8765)+ UI 端口(默认 5173)。服务的生产包是 apps/viewer/dist/。端口占用就换 --port。
界面结构
Jobs → Tasks → Attempt
| 层 | 内容 |
|---|---|
| Jobs | 本地整份 dataset 的运行结果,以及只跑一题的结果(Kind:suite / single)。Kind / Source 是过滤器;suite 的 Source 只列 task id。分数列是 Pass rate 和 Mean score;数据集是你已经选中的那一份。Kind 为 suite 时可以换 Table / Pareto / Waffle。Pareto 横轴是花费、token 或时间。Waffle 一格是一次 trial。图是观测,不算 PASS |
| Tasks | 每题状态 / 分数,以及各次 attempt 的 phase timing 平均时长。还没跑的题,时长留空。整份跑完且一题只有一次运行时,点进后直接打开那一次 |
| Attempt | 结果条、Timing(有数据时还有 Tokens)、角色、证据页签(Trajectory / Agent / …)。fork 的 Attempt 在模型名后有 fork 标签;轨迹在继承前缀之后画一条切线。replay 的 Attempt 在模型名后有 replay 标签;轨迹是源任务原文加上在新环境里重新执行的动作和这次的观察 |
数据集、Kind、Source、harness、模型和图表选项写在地址里。浏览器返回会回到刚才的选择。Kind 为 suite 时,数量是已结束的 job / 当前列出的 job,Trials 列保持可见。
点进一份整份运行后,任务表上方是已完成/总数,以及按最近几题用时估计的剩余时间。任务表分页。用时图仍然包含每一题。

Timing 来自 Attempt phase_timing(environment / run / evaluate / record / cleanup);hover 色条看分段耗时。
轨迹按轨迹文件顺序展示:一段 thought,紧接着它调用的工具,再下一段 thought。轨迹行(thought / tool_call / 最终 assistant)若带 elapsed_ms,步骤头会显示该步耗时;没有就不画标签。Viewer 不会用文件 mtime 或页面时钟补造。Trajectory 页签可以按步骤种类筛选。滚到轨迹区域后,右侧一条跳转可以对到某一步。

Trajectory 里每条 tool-call(以及过长行)可折叠;观测 PASS 条上有全部展开 / 全部收起,和 Hub 上 Attempt 页一样。
Verifier:同时有 evaluation/observation.jsonl 与 evaluation/checks.json 时,页签行最右侧是 Trajectory / Files 切换(默认轨迹)。只有一种时就只显示那一种。在文件树里选中 checks.json,右侧预览渲染检查点(计数、可展开行、stdout/stderr、dataset 脚本)。没有单独的 Checks 面板。Agent 的 Trajectory 页仍只读根 trajectory.jsonl。
当 analysis/<analyzer>/report.json 存在时,Attempt 页的证据页签里多一个 Analysis(stats、hack、review)。没有报告就不显示这个页签。这些报告是观察,不改变 PASS,也不改 evaluation/checks.json。Hub 不上传它们。
平时不连 Registry。点分享才会把当前打开的 suite 或 job 传上去。远程目录走 Hub。