niceeval 0.14.1 → 0.14.3-canary.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +1 -1
- package/dist/show/render.cjs +28 -15
- package/dist/show/render.cjs.map +1 -1
- package/docs-site/zh/reference/cli.mdx +4 -2
- package/docs-site/zh/troubleshooting/debugging.mdx +20 -1
- package/docs-site/zh/tutorials/criteria-files.mdx +2 -0
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +1 -1
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +3 -1
- package/docs-site/zh/tutorials/viewing-results.mdx +43 -4
- package/package.json +1 -1
package/INDEX.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
1. **先确认目标和边界。** 读用户项目的 README、依赖、被测入口和现有 NiceEval 文件,确认要评什么真实用例、被测应用怎样启动、使用哪个 Agent / Sandbox / Judge,以及允许的时间和费用。不要用「你好」式占位题代替真实用例;付费模型、全量 benchmark 或批量重跑先征得用户同意。
|
|
16
16
|
2. **只读完成当前步骤需要的文档。** 从下面的树进入 `agent-onboarding` 或 `quickstart`,再按被测对象选择一页接入教程;需要精确字段或命令时补读一页 Reference。不要一次加载整站,也不要凭记忆发明 API。
|
|
17
|
-
3. **先建立最小闭环。** Adapter 连接真实被测入口,Experiment
|
|
17
|
+
3. **先建立最小闭环。** Adapter 连接真实被测入口,Experiment 明确选择评估用例与运行条件,评估用例覆盖目标产品有区分度的核心任务,不能退化成普通聊天或算术。写代码前确认四条链都能闭合:协议链从 Experiment 到目标响应,核心能力链从真实输入到业务断言,配置链从声明值到 runtime 消费方,生命周期链从启动、进程级凭证和 readiness 到失败清理。先运行 `niceeval exp list`,再用 `niceeval exp <experiment> <eval> --dry` 核对选择、模型、Attempt 数和结果沿用;生命周期或 Sandbox 不明确时用 `niceeval debug <experiment> <eval>` 查看静态计划。
|
|
18
18
|
4. **小范围真实运行。** 先跑一条评估用例、一个 Experiment 和足够证明链路的最小 Attempt 数;需要时给预算与并发加保护。保留完成反馈中的 `createdRunIds` 与 `publicationCutoff`。先用 `niceeval show --run <run-id>` 在终端快速审阅;需要稳定 JSON 时,运行 `niceeval query discover`,再以 versioned request 调用 `niceeval query explain` 或 `niceeval query run`。需要浏览器连续深读时使用 `niceeval view --run <run-id>`。不要只看进程退出码。
|
|
19
19
|
5. **交付可复现结果。** 告诉用户新增或修改了哪些文件、实际运行了什么命令、Run ID、通过/失败/不可用状态和下一步。没有真实运行就明确说明,不把 `--dry`、typecheck 或配置发现说成实验已经跑通。
|
|
20
20
|
|
package/dist/show/render.cjs
CHANGED
|
@@ -44,13 +44,17 @@ const aggregateEntries = (value) => ({
|
|
|
44
44
|
kind: "keyValue",
|
|
45
45
|
entries: [
|
|
46
46
|
{ key: "Observed", value: `${value.observed}/${value.expected}` },
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
47
|
+
...(value.evaluationKind === "points"
|
|
48
|
+
? [{
|
|
49
|
+
key: "Outcomes",
|
|
50
|
+
value: `${value.passed} scored; ${value.errored} errored; ${value.skipped} skipped`,
|
|
51
|
+
}]
|
|
52
|
+
: [{
|
|
53
|
+
key: "Verdicts",
|
|
54
|
+
value: value.failed === 0 && value.errored === 0 && value.skipped === 0
|
|
55
|
+
? `${value.passed} passed`
|
|
56
|
+
: `${value.passed} passed; ${value.failed} failed; ${value.errored} errored; ${value.skipped} skipped`,
|
|
57
|
+
}, { key: "Pass rate", value: passRate(value.passRate) }]),
|
|
54
58
|
...(value.evaluationKind === "pass"
|
|
55
59
|
? []
|
|
56
60
|
: [{ key: "Score", value: metric(value.score) }]),
|
|
@@ -80,6 +84,7 @@ const attemptBlocks = (cells, group, all) => {
|
|
|
80
84
|
let shownErrors = 0;
|
|
81
85
|
return cells.flatMap((cell) => {
|
|
82
86
|
const showScore = cell.aggregate.evaluationKind !== "pass";
|
|
87
|
+
const showScoreOutcome = cell.aggregate.evaluationKind === "points";
|
|
83
88
|
const members = all
|
|
84
89
|
? cell.members
|
|
85
90
|
: cell.members.filter((member) => {
|
|
@@ -105,7 +110,7 @@ const attemptBlocks = (cells, group, all) => {
|
|
|
105
110
|
kind: "table",
|
|
106
111
|
columns: [
|
|
107
112
|
{ header: "Attempt", maxWidth: 14 },
|
|
108
|
-
{ header: "Verdict" },
|
|
113
|
+
{ header: showScoreOutcome ? "Outcome" : "Verdict" },
|
|
109
114
|
{ header: "Duration" },
|
|
110
115
|
...(showScore ? [{ header: "Score" }] : []),
|
|
111
116
|
],
|
|
@@ -124,7 +129,11 @@ const attemptBlocks = (cells, group, all) => {
|
|
|
124
129
|
? `absent (${member.publication.reason})`
|
|
125
130
|
: "pending",
|
|
126
131
|
member.publication.state === "published"
|
|
127
|
-
?
|
|
132
|
+
? showScoreOutcome
|
|
133
|
+
? member.publication.verdict === "passed"
|
|
134
|
+
? "scored"
|
|
135
|
+
: member.publication.verdict ?? "not-recorded"
|
|
136
|
+
: member.publication.verdict ?? "not-recorded"
|
|
128
137
|
: member.publication.state,
|
|
129
138
|
member.publication.state === "published"
|
|
130
139
|
? duration(member.publication.durationMs)
|
|
@@ -140,21 +149,24 @@ const attemptBlocks = (cells, group, all) => {
|
|
|
140
149
|
});
|
|
141
150
|
};
|
|
142
151
|
const hiddenAttemptSummary = (cells) => {
|
|
143
|
-
const counts = { passed: 0, failed: 0, errored: 0 };
|
|
152
|
+
const counts = { passed: 0, failed: 0, scored: 0, errored: 0 };
|
|
144
153
|
for (const cell of cells) {
|
|
145
154
|
for (const member of cell.members) {
|
|
146
155
|
if (member.publication.state !== "published")
|
|
147
156
|
continue;
|
|
148
157
|
const verdict = member.publication.verdict;
|
|
149
|
-
if (verdict === "passed"
|
|
150
|
-
|
|
151
|
-
|
|
158
|
+
if (verdict === "passed") {
|
|
159
|
+
counts[cell.aggregate.evaluationKind === "points" ? "scored" : "passed"] += 1;
|
|
160
|
+
}
|
|
161
|
+
else if (verdict === "failed" || verdict === "errored") {
|
|
152
162
|
counts[verdict] += 1;
|
|
163
|
+
}
|
|
153
164
|
}
|
|
154
165
|
}
|
|
155
166
|
const hidden = [
|
|
156
167
|
...(counts.passed > 0 ? [`${counts.passed} passed`] : []),
|
|
157
168
|
...(counts.failed > 0 ? [`${counts.failed} failed`] : []),
|
|
169
|
+
...(counts.scored > 0 ? [`${counts.scored} scored`] : []),
|
|
158
170
|
...(counts.errored > 5 ? [`${counts.errored - 5} errored`] : []),
|
|
159
171
|
];
|
|
160
172
|
return hidden.length === 0 ? null : `${hidden.join("; ")} Attempts hidden`;
|
|
@@ -200,6 +212,7 @@ function renderOverview(value, options = {}) {
|
|
|
200
212
|
kind: "panel",
|
|
201
213
|
title: "Experiments",
|
|
202
214
|
blocks: groups.flatMap((group) => {
|
|
215
|
+
const showPassRate = group.experiments.some(({ aggregate }) => aggregate.evaluationKind !== "points");
|
|
203
216
|
const showScore = group.experiments.some(({ aggregate }) => aggregate.evaluationKind !== "pass");
|
|
204
217
|
return [
|
|
205
218
|
...(group.name === null
|
|
@@ -212,7 +225,7 @@ function renderOverview(value, options = {}) {
|
|
|
212
225
|
{ header: "Observed" },
|
|
213
226
|
{ header: "Agent" },
|
|
214
227
|
{ header: "Model" },
|
|
215
|
-
{ header: "Pass rate" },
|
|
228
|
+
...(showPassRate ? [{ header: "Pass rate" }] : []),
|
|
216
229
|
...(showScore ? [{ header: "Score" }] : []),
|
|
217
230
|
],
|
|
218
231
|
rows: group.experiments.map((experiment) => [
|
|
@@ -220,7 +233,7 @@ function renderOverview(value, options = {}) {
|
|
|
220
233
|
`${experiment.aggregate.observed}/${experiment.aggregate.expected}`,
|
|
221
234
|
executionValue(experiment.agent),
|
|
222
235
|
executionValue(experiment.model),
|
|
223
|
-
passRate(experiment.aggregate.passRate),
|
|
236
|
+
...(showPassRate ? [passRate(experiment.aggregate.passRate)] : []),
|
|
224
237
|
...(showScore ? [metric(experiment.aggregate.score)] : []),
|
|
225
238
|
]),
|
|
226
239
|
},
|
package/dist/show/render.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["render.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderTerminal, type TerminalBlock, type TerminalPanelContentBlock, } from \"../terminal/index.ts\";\nimport type { Aggregate, AttemptView, DiffView, ExperimentView, ExecutionValue, Metric, OverviewView, RunView, ScoredValue, SourcesView, TimingView, TraceDetailView, TraceItem, TraceView, UsageView, } from \"./model.ts\";\nconst TERMINAL_OPTIONS = Object.freeze({ width: 80, mode: \"plain\" as const });\nconst terminal = (blocks: readonly TerminalBlock[]): string => renderTerminal(blocks, TERMINAL_OPTIONS);\nconst fmt = (value: number): string => Number.isInteger(value)\n ? String(value)\n : value.toFixed(2).replace(/0+$/u, \"\").replace(/\\.$/u, \"\");\nconst metric = (value: Metric, formatValue: (value: number) => string = fmt): string => {\n if (value.value === null)\n return value.state;\n const rendered = formatValue(value.value);\n return value.state === \"available\"\n ? rendered\n : `${rendered} (${value.state})`;\n};\nconst passRate = (value: Metric): string => metric(value, (rate) => `${fmt(rate * 100)}%`);\nconst duration = (value: Metric): string => metric(value, (milliseconds) => {\n if (milliseconds < 1000)\n return `${fmt(milliseconds)} ms`;\n if (milliseconds < 60000)\n return `${fmt(milliseconds / 1000)} s`;\n if (milliseconds < 3600000)\n return `${fmt(milliseconds / 60000)} min`;\n return `${fmt(milliseconds / 3600000)} h`;\n});\nconst score = (value: ScoredValue): string => value.state === \"not-scored\"\n ? value.state\n : `${fmt(value.earned)}/${fmt(value.possible)} (${value.state}${value.state === \"unavailable\"\n ? `; ${value.unavailable} unavailable`\n : \"\"})`;\nconst aggregateEntries = (value: Aggregate): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} => ({\n kind: \"keyValue\",\n entries: [\n { key: \"Observed\", value: `${value.observed}/${value.expected}` },\n {\n key: \"Verdicts\",\n value: value.failed === 0 && value.errored === 0 && value.skipped === 0\n ? `${value.passed} passed`\n : `${value.passed} passed; ${value.failed} failed; ${value.errored} errored; ${value.skipped} skipped`,\n },\n { key: \"Pass rate\", value: passRate(value.passRate) },\n ...(value.evaluationKind === \"pass\"\n ? []\n : [{ key: \"Score\", value: metric(value.score) }]),\n { key: \"Duration\", value: duration(value.durationMs) },\n { key: \"Tokens\", value: metric(value.tokens) },\n ],\n});\ninterface ExperimentGroup {\n readonly name: string | null;\n readonly experiments: OverviewView[\"experiments\"];\n}\nfunction experimentGroup(experimentId: string): string | null {\n const separator = experimentId.indexOf(\"/\");\n return separator <= 0 ? null : experimentId.slice(0, separator);\n}\nfunction relativeToGroup(id: string, group: string | null): string {\n const prefix = group === null ? \"\" : `${group}/`;\n return prefix !== \"\" && id.startsWith(prefix) ? id.slice(prefix.length) : id;\n}\nfunction groupExperiments(value: OverviewView): readonly ExperimentGroup[] {\n const groups = new Map<string | null, OverviewView[\"experiments\"][number][]>();\n for (const experiment of value.experiments) {\n const group = experimentGroup(experiment.experimentId);\n const members = groups.get(group) ?? [];\n members.push(experiment);\n groups.set(group, members);\n }\n return [...groups].map(([name, experiments]) => ({ name, experiments }));\n}\nconst attemptBlocks = (cells: OverviewView[\"cells\"], group: string | null, all: boolean): readonly TerminalPanelContentBlock[] => {\n let shownErrors = 0;\n return cells.flatMap((cell) => {\n const showScore = cell.aggregate.evaluationKind !== \"pass\";\n const members = all\n ? cell.members\n : cell.members.filter((member) => {\n if (member.publication.state !== \"published\")\n return true;\n if (member.publication.verdict === \"passed\" ||\n member.publication.verdict === \"failed\")\n return false;\n if (member.publication.verdict !== \"errored\")\n return true;\n shownErrors += 1;\n return shownErrors <= 5;\n });\n if (cell.members.length > 0 && members.length === 0)\n return [];\n return [\n {\n kind: \"divider\" as const,\n title: `Eval ${relativeToGroup(cell.evalId, group)}`,\n attachNext: true,\n },\n {\n kind: \"table\" as const,\n columns: [\n { header: \"Attempt\", maxWidth: 14 },\n { header: \"Verdict\" },\n { header: \"Duration\" },\n ...(showScore ? [{ header: \"Score\" }] : []),\n ],\n overflow: \"wrap\" as const,\n rows: members.length === 0\n ? [[\n \"not-recorded\",\n \"not-recorded\",\n duration(cell.aggregate.durationMs),\n ...(showScore ? [metric(cell.aggregate.score)] : []),\n ]]\n : members.map((member) => [\n member.publication.state === \"published\"\n ? member.publication.attemptLocator\n : member.publication.state === \"absent\"\n ? `absent (${member.publication.reason})`\n : \"pending\",\n member.publication.state === \"published\"\n ? member.publication.verdict ?? \"not-recorded\"\n : member.publication.state,\n member.publication.state === \"published\"\n ? duration(member.publication.durationMs)\n : member.publication.state,\n ...(showScore\n ? [member.publication.state === \"published\"\n ? metric(member.publication.score)\n : member.publication.state]\n : []),\n ]),\n },\n ];\n });\n};\nconst hiddenAttemptSummary = (cells: OverviewView[\"cells\"]): string | null => {\n const counts = { passed: 0, failed: 0, errored: 0 };\n for (const cell of cells) {\n for (const member of cell.members) {\n if (member.publication.state !== \"published\")\n continue;\n const verdict = member.publication.verdict;\n if (verdict === \"passed\" ||\n verdict === \"failed\" ||\n verdict === \"errored\")\n counts[verdict] += 1;\n }\n }\n const hidden = [\n ...(counts.passed > 0 ? [`${counts.passed} passed`] : []),\n ...(counts.failed > 0 ? [`${counts.failed} failed`] : []),\n ...(counts.errored > 5 ? [`${counts.errored - 5} errored`] : []),\n ];\n return hidden.length === 0 ? null : `${hidden.join(\"; \")} Attempts hidden`;\n};\nconst compactContinuation = (cells: OverviewView[\"cells\"], experimentId: string, all: boolean): readonly TerminalPanelContentBlock[] => {\n if (all)\n return [];\n const hidden = hiddenAttemptSummary(cells);\n return hidden === null\n ? []\n : [\n {\n kind: \"divider\",\n title: hidden,\n attachNext: true,\n },\n {\n kind: \"keyValue\",\n entries: [{\n key: \"See more\",\n value: `niceeval show --experiment ${experimentId}`,\n }],\n },\n ];\n};\nconst stateCount = (state: string, count: number, noun: string): string => `${state}; ${count} ${noun}s`;\nconst textOrNotRecorded = (value: string | null | undefined): string => value ?? \"not-recorded\";\nexport function renderOverview(value: OverviewView, options: {\n readonly all?: boolean;\n} = {}): string {\n const all = options.all === true;\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: \"NiceEval results\",\n blocks: [\n { kind: \"divider\", title: \"Totals\" },\n aggregateEntries(value.totals),\n ],\n },\n ];\n if (value.experiments.length > 0) {\n const groups = groupExperiments(value);\n blocks.push({\n kind: \"panel\",\n title: \"Experiments\",\n blocks: groups.flatMap((group) => {\n const showScore = group.experiments.some(({ aggregate }) => aggregate.evaluationKind !== \"pass\");\n return [\n ...(group.name === null\n ? []\n : [{ kind: \"divider\" as const, title: group.name }]),\n {\n kind: \"table\" as const,\n columns: [\n { header: \"Experiment\" },\n { header: \"Observed\" },\n { header: \"Agent\" },\n { header: \"Model\" },\n { header: \"Pass rate\" },\n ...(showScore ? [{ header: \"Score\" }] : []),\n ],\n rows: group.experiments.map((experiment) => [\n relativeToGroup(experiment.experimentId, group.name),\n `${experiment.aggregate.observed}/${experiment.aggregate.expected}`,\n executionValue(experiment.agent),\n executionValue(experiment.model),\n passRate(experiment.aggregate.passRate),\n ...(showScore ? [metric(experiment.aggregate.score)] : []),\n ]),\n },\n ];\n }),\n });\n }\n if (value.cells.length > 0) {\n for (const group of groupExperiments(value)) {\n const experimentIds = new Set(group.experiments.map(({ experimentId }) => experimentId));\n const cells = value.cells.filter(({ experimentId }) => experimentIds.has(experimentId));\n blocks.push({\n kind: \"panel\",\n title: group.name === null ? \"Attempts\" : `Attempts · ${group.name}`,\n blocks: group.experiments.flatMap((experiment) => {\n const experimentCells = cells.filter(({ experimentId }) => experimentId === experiment.experimentId);\n return [\n {\n kind: \"divider\" as const,\n title: `Experiment ${experiment.experimentId}`,\n },\n ...attemptBlocks(experimentCells, group.name, all),\n ...compactContinuation(experimentCells, experiment.experimentId, all),\n ];\n }),\n });\n }\n }\n return terminal(blocks);\n}\nexport function renderExperiment(value: ExperimentView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Experiment ${value.experimentId}`,\n blocks: [\n { kind: \"divider\", title: \"Summary\" },\n aggregateEntries(value.aggregate),\n { kind: \"divider\", title: \"Attempts\" },\n ...attemptBlocks(value.cells, null, true),\n ],\n },\n ]);\n}\nfunction executionValue(value: ExecutionValue): string {\n return value.state === \"available\" ? value.value : value.state;\n}\nexport function renderRun(value: RunView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Run ${value.runId}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Experiment\", value: value.experimentId },\n { key: \"State\", value: \"sealed\" },\n { key: \"Started\", value: new Date(value.startedAt).toISOString() },\n {\n key: \"Completed\",\n value: new Date(value.completedAt).toISOString(),\n },\n {\n key: \"Summary\",\n value: `${value.observed}/${value.expected} attempts observed`,\n },\n ],\n },\n { kind: \"divider\", title: \"Coverage\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.coverage.state },\n {\n key: \"Members\",\n value: `${value.coverage.observedMemberCount}/${value.coverage.expectedMemberCount} observed; ${value.coverage.completeMemberCount} complete`,\n },\n { key: \"Facts\", value: String(value.coverage.factCount) },\n {\n key: \"Limitations\",\n value: String(value.coverage.limitations.length),\n },\n ],\n },\n { kind: \"divider\", title: \"Usage\" },\n runUsageBlocks(value.usage),\n { kind: \"divider\", title: \"Limitations\" },\n runLocatedLimitationTable(value.limitations),\n ],\n },\n ];\n for (const member of value.members) {\n blocks.push({\n kind: \"panel\",\n title: `Member ${member.slotId}`,\n meta: member.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Eval\", value: member.evalId },\n { key: \"Attempt ordinal\", value: String(member.attemptOrdinal) },\n { key: \"Attempt\", value: member.locator ?? \"not-recorded\" },\n { key: \"Relation\", value: member.relation ?? \"not-recorded\" },\n { key: \"Outcome\", value: member.outcome ?? \"not-recorded\" },\n { key: \"Verdict\", value: member.verdict ?? \"not-recorded\" },\n {\n key: \"Score\",\n value: member.score === null ? \"not-recorded\" : score(member.score),\n },\n ],\n },\n { kind: \"divider\", title: \"Coverage\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: member.coverage.state },\n { key: \"Facts\", value: String(member.coverage.facts.length) },\n {\n key: \"Limitations\",\n value: String(member.coverage.limitations.length),\n },\n ],\n },\n { kind: \"divider\", title: \"Usage\" },\n memberUsageBlocks(member.usage),\n { kind: \"divider\", title: \"Limitations\" },\n runMemberLimitationTable(member.limitations),\n ],\n });\n }\n return terminal(blocks);\n}\nfunction runUsageBlocks(value: RunView[\"usage\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n {\n key: \"Members\",\n value: `${value.observedMemberCount}/${value.expectedMemberCount} observed; ${value.recordedAttemptCount} recorded attempts`,\n },\n ...usageTotalEntries(value.totals),\n { key: \"Limitations\", value: String(value.limitations.length) },\n ],\n };\n}\nfunction memberUsageBlocks(value: RunView[\"members\"][number][\"usage\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n {\n key: \"Summary\",\n value: value.summary === null\n ? \"not-recorded\"\n : `${value.summary.turnCount} turns; ${value.summary.observationCount} observations`,\n },\n ...usageTotalEntries(value.totals),\n {\n key: \"Limitations\",\n value: boundedPreview(value.limitations.length, value.limitationsTruncated, value.omittedLimitationCount),\n },\n ],\n };\n}\ntype RunMemberLimitation = RunView[\"members\"][number][\"limitations\"][number];\nfunction runMemberLimitationTable(values: readonly RunMemberLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: values.map((value) => [formatRunMemberLimitation(value)]),\n overflow: \"wrap\",\n };\n}\nfunction runLocatedLimitationTable(values: RunView[\"limitations\"]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [\n { header: \"Slot\" },\n { header: \"Attempt\" },\n { header: \"Limitation\" },\n ],\n rows: values.map((value) => [\n value.slotId,\n value.locator ?? \"not-recorded\",\n formatRunMemberLimitation(value.limitation),\n ]),\n overflow: \"wrap\",\n };\n}\nfunction formatRunMemberLimitation(value: RunMemberLimitation): string {\n switch (value.kind) {\n case \"member-not-observed\":\n return `${value.kind}; ${value.state}`;\n case \"attempt-unresolved\":\n return `${value.kind}; run ${value.originRunId}; attempt ${value.attemptId}`;\n case \"coverage\":\n return `${value.kind}; ${formatAttemptLimitation(value.detail)}`;\n case \"usage\":\n return `${value.kind}; ${formatUsageLimitation(value.detail)}`;\n }\n}\ntype AttemptLimitation = RunView[\"members\"][number][\"coverage\"][\"limitations\"][number];\nfunction formatAttemptLimitation(value: AttemptLimitation): string {\n if (\"channel\" in value) {\n return `${value.channel}; ${value.status}${value.reason === undefined ? \"\" : `; ${value.reason}`}`;\n }\n return `assertion-material; ${value.state}; ${value.reason}; ${value.limitations.length} material limitations`;\n}\nexport function renderAttempt(value: AttemptView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Attempt ${value.locator}`,\n meta: value.verdict ?? value.outcome,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Experiment\", value: value.experimentId },\n { key: \"Eval\", value: value.evalId },\n { key: \"Run\", value: value.originRunId },\n { key: \"Attempt\", value: value.attemptId },\n { key: \"Slot\", value: value.slotId },\n { key: \"Outcome\", value: value.outcome },\n { key: \"Verdict\", value: value.verdict ?? \"not-available\" },\n { key: \"Score\", value: score(value.score) },\n ],\n },\n {\n kind: \"divider\",\n title: `assertions ${value.sections.assertions} · ${value.assertions.entries.length} entries`,\n },\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Summary\",\n value: stateCount(value.sections.assertions, value.assertions.entries.length, \"entry\"),\n },\n ],\n },\n {\n kind: \"table\",\n columns: [\n { header: \"Assertion\" },\n { header: \"Entry ID\" },\n { header: \"Group\" },\n ],\n rows: value.assertions.entries.map((entry) => [\n entry.label ?? entry.key ?? entry.entryId,\n entry.entryId,\n entry.groupPath.length === 0 ? \"root\" : entry.groupPath.join(\" / \"),\n ]),\n },\n { kind: \"divider\", title: \"Evidence\" },\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"coverage\",\n value: value.evidenceCoverage.length === 0\n ? \"none\"\n : value.evidenceCoverage.join(\"; \"),\n },\n {\n key: \"limitations\",\n value: value.limitations.length === 0\n ? \"none\"\n : value.limitations.join(\"; \"),\n },\n ],\n },\n { kind: \"divider\", title: \"Sections\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Source\", value: value.sections.sources },\n { key: \"Execution\", value: value.sections.trace },\n { key: \"Timing\", value: value.sections.timing },\n { key: \"Usage\", value: value.sections.usage },\n { key: \"Diff\", value: value.sections.diff },\n ],\n },\n { kind: \"divider\", title: \"Next\" },\n { kind: \"command\", command: `niceeval show ${value.locator} --source` },\n {\n kind: \"command\",\n command: `niceeval show ${value.locator} --execution`,\n },\n { kind: \"command\", command: `niceeval show ${value.locator} --timing` },\n { kind: \"command\", command: `niceeval show ${value.locator} --usage` },\n { kind: \"command\", command: `niceeval show ${value.locator} --diff` },\n ],\n },\n ]);\n}\nexport function renderSources(value: SourcesView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Captured source ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Captured items\", value: String(value.items.length) },\n {\n key: \"Omitted items\",\n value: value.hasMore ? String(value.omittedItemCount) : \"0\",\n },\n ],\n },\n ],\n },\n ];\n for (const item of value.items) {\n blocks.push({\n kind: \"panel\",\n title: `${item.path} · ${item.sourceItemId} · ${item.byteLength} bytes`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Bytes\", value: String(item.byteLength) },\n { key: \"Content\", value: item.content.state },\n ...(item.content.state === \"omitted\"\n ? [\n { key: \"Reason\", value: item.content.reason },\n {\n key: \"Byte limit\",\n value: `${item.content.byteLimit}/${item.content.byteLength} retained`,\n },\n ]\n : []),\n ],\n },\n ],\n });\n if (item.content.state === \"available\") {\n blocks.push({ kind: \"code\", text: item.content.text });\n }\n }\n blocks.push({\n kind: \"panel\",\n title: \"Assertion source facts\",\n meta: value.assertions.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Source sites\",\n value: String(value.assertions.sites.length),\n },\n {\n key: \"Omitted source sites\",\n value: value.assertions.hasMoreSourceSites === true\n ? String(value.assertions.omittedSourceSiteCount ?? 0)\n : \"0\",\n },\n ],\n },\n ],\n }, {\n kind: \"raw\",\n text: value.assertions.sites.map((site) => `${site.entryId} · ${site.role} · ${sourceRange(site.start, site.end)} · ${site.source.state === \"mapped\"\n ? `mapped · ${site.source.sourceItemId} · ${site.source.sha256}`\n : `unmapped · ${site.source.reason}`}`).join(\"\\n\"),\n });\n return terminal(blocks);\n}\nfunction sourceRange(start: SourcesView[\"assertions\"][\"sites\"][number][\"start\"], end: SourcesView[\"assertions\"][\"sites\"][number][\"end\"]): string {\n return `start ${start.line}:${start.column} · end ${end.line}:${end.column}`;\n}\nexport function renderTrace(value: TraceView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Execution ${value.locator}`,\n blocks: [],\n },\n {\n kind: \"panel\",\n title: `Conversation · ${value.conversation.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Turns\",\n value: boundedPreview(value.conversation.turns.length, value.conversation.turnsTruncated, value.conversation.omittedTurnCount),\n },\n {\n key: \"Items\",\n value: boundedPreview(value.conversation.itemCount, value.conversation.itemsTruncated, value.conversation.omittedItemCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.conversation.limitations.length, value.conversation.limitationsTruncated, value.conversation.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.conversation.limitations),\n ],\n },\n ];\n for (const turn of value.conversation.turns) {\n blocks.push({\n kind: \"panel\",\n title: `Turn ${turn.turnId}`,\n meta: turn.outcome,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Sequence\", value: String(turn.sequence) },\n { key: \"Items\", value: String(turn.items.length) },\n ],\n },\n ],\n });\n for (const item of turn.items)\n blocks.push(...traceItemBlocks(item));\n }\n blocks.push({\n kind: \"panel\",\n title: `Commands · ${value.commands.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Items\",\n value: boundedPreview(value.commands.items.length, value.commands.hasMore, value.commands.omittedCommandCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.commands.limitations.length, value.commands.limitationsTruncated, value.commands.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.commands.limitations),\n { kind: \"divider\", title: \"Command outline\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Command ID\" },\n { header: \"Phase\" },\n { header: \"Outcome\" },\n ],\n rows: value.commands.items.map((command) => [\n command.commandId,\n command.phase,\n command.outcome,\n ]),\n },\n ],\n });\n blocks.push({\n kind: \"panel\",\n title: `Diagnostics · ${value.diagnostics.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Items\",\n value: boundedPreview(value.diagnostics.items.length, value.diagnostics.hasMore, value.diagnostics.omittedDiagnosticCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.diagnostics.limitations.length, value.diagnostics.limitationsTruncated, value.diagnostics.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.diagnostics.limitations),\n { kind: \"divider\", title: \"Diagnostic outline\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Diagnostic ID\" },\n { header: \"Phase\" },\n { header: \"Kind\" },\n { header: \"Code\" },\n { header: \"Summary\" },\n ],\n rows: value.diagnostics.items.map((diagnostic) => [\n diagnostic.diagnosticId,\n diagnostic.phase,\n diagnostic.kind,\n diagnostic.code,\n diagnostic.summary,\n ]),\n overflow: \"wrap\",\n },\n ],\n });\n blocks.push({ kind: \"panel\", title: \"Stable identities\", blocks: [] }, {\n kind: \"raw\",\n text: [\n ...value.identities.itemIds.map((id) => `item ${id}`),\n ...value.identities.toolOccurrenceIds.map((id) => `tool occurrence ${id}`),\n ...value.identities.commandIds.map((id) => `command ${id}`),\n ].join(\"\\n\"),\n });\n return terminal(blocks);\n}\nfunction boundedPreview(shown: number, truncated: boolean, omitted: number): string {\n return `${shown} shown; ${truncated ? `bounded preview, ${omitted} omitted` : \"complete preview, 0 omitted\"}`;\n}\ntype ProjectionLimitation = TimingView[\"limitations\"][number] | TraceView[\"conversation\"][\"limitations\"][number] | TraceView[\"diagnostics\"][\"limitations\"][number];\nfunction limitationTable(limitations: readonly ProjectionLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: limitations.map((limitation) => [formatProjectionLimitation(limitation)]),\n overflow: \"wrap\",\n };\n}\nfunction projectionLimitationTable(limitations: readonly ProjectionLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return limitationTable(limitations);\n}\nfunction formatProjectionLimitation(value: ProjectionLimitation): string {\n if (\"issue\" in value)\n return `invalid projection; ${value.issue}`;\n if (\"source\" in value) {\n if (value.source === \"agent-turns\") {\n return `${value.source}; turn ${value.turnId}; ${value.channel}; ${value.state}; ${value.reason}`;\n }\n const details = value.limitations.map(formatProjectionLimitation).join(\"; \");\n return `${value.source}; ${value.state}${details.length === 0 ? \"\" : `; ${details}`}`;\n }\n switch (value.code) {\n case \"capture-failed\":\n case \"capture-interrupted\":\n return `${value.code}; stage ${value.stage}; target ${value.target}`;\n case \"collection-cap-reached\":\n case \"unsupported-input\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}`;\n case \"text-truncated\":\n case \"redacted\":\n case \"invalid-utf8-replaced\":\n case \"unsafe-control-stripped\":\n return `${value.code}; target ${value.target}; replaced or omitted ${value.replacementOrOmittedCount}`;\n }\n}\ntype UsageLimitation = UsageView[\"limitations\"][number];\nfunction formatUsageLimitation(value: UsageLimitation): string {\n if (\"source\" in value) {\n return `${value.source}; turn ${value.turnId}; ${value.channel}; ${value.state}; ${value.reason}`;\n }\n return formatProjectionLimitation(value);\n}\nfunction traceItemBlocks(item: TraceItem): readonly TerminalBlock[] {\n const entries: {\n key: string;\n value: string;\n }[] = [\n { key: \"Kind\", value: item.kind },\n { key: \"Sequence\", value: String(item.sequence) },\n ];\n let content: string | null = null;\n switch (item.kind) {\n case \"message\":\n entries.push({ key: \"Role\", value: item.role });\n content = item.text;\n break;\n case \"tool-call\":\n entries.push({ key: \"Tool\", value: item.tool }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.input;\n break;\n case \"tool-result\":\n entries.push({ key: \"Outcome\", value: item.outcome }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.output;\n break;\n case \"thinking-summary\":\n case \"compaction\":\n case \"context-injection\":\n content = item.summary;\n break;\n case \"subagent\":\n entries.push({ key: \"State\", value: item.state }, { key: \"Label\", value: item.label });\n content = item.summary;\n break;\n case \"input-request\":\n entries.push({ key: \"State\", value: item.state });\n content = `Prompt: ${item.prompt}\\nResponse: ${textOrNotRecorded(item.response)}`;\n break;\n case \"skill-load\":\n case \"conversation-error\":\n entries.push({ key: \"Code\", value: item.code });\n content = item.summary;\n break;\n }\n return [\n {\n kind: \"panel\",\n title: `Item ${item.itemId}`,\n blocks: [{ kind: \"keyValue\", entries }],\n },\n ...(content === null ? [] : [{ kind: \"code\" as const, text: content }]),\n ];\n}\nexport function renderTraceDetail(value: TraceDetailView): string {\n const body = value.body;\n const heading: TerminalBlock = {\n kind: \"panel\",\n title: `Execution detail ${value.locator}`,\n meta: `${value.kind} ${value.stableId}`,\n blocks: [],\n };\n if (body.kind === \"item\") {\n return terminal([heading, ...traceDetailItemBlocks(body.item)]);\n }\n if (body.kind === \"tool-occurrence\") {\n return terminal([\n heading,\n {\n kind: \"panel\",\n title: \"Occurrence turns\",\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Call\",\n value: body.turn.call === null\n ? \"not-recorded\"\n : `${body.turn.call.turnId}; sequence ${body.turn.call.sequence}; ${body.turn.call.outcome}`,\n },\n {\n key: \"Result\",\n value: body.turn.result === null\n ? \"not-recorded\"\n : `${body.turn.result.turnId}; sequence ${body.turn.result.sequence}; ${body.turn.result.outcome}`,\n },\n ],\n },\n ],\n },\n ...(body.call === null\n ? [{\n kind: \"panel\" as const,\n title: \"Call\",\n meta: \"not-recorded\",\n blocks: [],\n }]\n : traceDetailItemBlocks(body.call, \"Call\")),\n ...(body.result === null\n ? [{\n kind: \"panel\" as const,\n title: \"Result\",\n meta: \"not-recorded\",\n blocks: [],\n }]\n : traceDetailItemBlocks(body.result, \"Result\")),\n ]);\n }\n return terminal([\n heading,\n {\n kind: \"panel\",\n title: `Command ${body.commandId}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Invocation\", value: commandInvocation(body.invocation) },\n {\n key: \"Working directory\",\n value: workingDirectory(body.workingDirectory),\n },\n { key: \"Outcome\", value: commandOutcome(body.outcome) },\n { key: \"Turn\", value: body.turnId ?? \"not-recorded\" },\n { key: \"Phase\", value: body.phase },\n { key: \"Sequence\", value: String(body.sequence) },\n ],\n },\n { kind: \"divider\", title: \"stdout\" },\n streamMetadata(body.stdout),\n { kind: \"divider\", title: \"stderr\" },\n streamMetadata(body.stderr),\n ],\n },\n { kind: \"code\", text: body.stdout.text },\n { kind: \"code\", text: body.stderr.text },\n ]);\n}\ntype TraceDetailItem = Extract<TraceDetailView[\"body\"], {\n readonly kind: \"item\";\n}>[\"item\"];\nfunction traceDetailItemBlocks(item: TraceDetailItem, title = `Item ${item.itemId}`): readonly TerminalBlock[] {\n const entries: {\n key: string;\n value: string;\n }[] = [\n { key: \"Item ID\", value: item.itemId },\n { key: \"Kind\", value: item.kind },\n { key: \"Turn\", value: item.turnId },\n { key: \"Turn sequence\", value: String(item.turnSequence) },\n { key: \"Turn outcome\", value: item.turnOutcome },\n { key: \"Session\", value: item.sessionId ?? \"not-recorded\" },\n { key: \"Event\", value: item.eventId ?? \"not-recorded\" },\n {\n key: \"Sequence\",\n value: item.sequence === undefined ? \"not-recorded\" : String(item.sequence),\n },\n ];\n let content: string | null = null;\n switch (item.kind) {\n case \"message\":\n entries.push({ key: \"Role\", value: item.role });\n content = item.text;\n break;\n case \"tool-call\":\n entries.push({ key: \"Tool\", value: item.tool }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.input;\n break;\n case \"tool-result\":\n entries.push({ key: \"Outcome\", value: item.outcome }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.output;\n break;\n case \"thinking-summary\":\n case \"compaction\":\n case \"context-injection\":\n content = item.summary;\n break;\n case \"subagent\":\n entries.push({ key: \"State\", value: item.state }, { key: \"Label\", value: item.label });\n content = item.summary;\n break;\n case \"input-request\":\n entries.push({ key: \"State\", value: item.state });\n content = `Prompt: ${item.prompt}\\nResponse: ${textOrNotRecorded(item.response)}`;\n break;\n case \"skill-load\":\n case \"conversation-error\":\n entries.push({ key: \"Code\", value: item.code });\n content = item.summary;\n break;\n }\n return [\n {\n kind: \"panel\",\n title,\n blocks: [{ kind: \"keyValue\", entries }],\n },\n ...(content === null ? [] : [{ kind: \"code\" as const, text: content }]),\n ];\n}\ntype CommandDetail = Extract<TraceDetailView[\"body\"], {\n readonly kind: \"command\";\n}>;\nfunction streamMetadata(stream: CommandDetail[\"stdout\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"Retained bytes\", value: String(stream.retainedBytes) },\n { key: \"Total safe UTF-8 bytes\", value: String(stream.totalSafeUtf8Bytes) },\n { key: \"SHA-256\", value: stream.sha256 },\n { key: \"Truncation\", value: stream.truncation.state },\n {\n key: \"Omitted safe UTF-8 bytes\",\n value: String(stream.truncation.omittedSafeUtf8Bytes),\n },\n ],\n };\n}\nfunction commandInvocation(value: CommandDetail[\"invocation\"]): string {\n return value.kind === \"shell\"\n ? value.command\n : [value.executable, ...value.arguments].join(\" \");\n}\nfunction workingDirectory(value: CommandDetail[\"workingDirectory\"]): string {\n return value.kind === \"project-relative\" ? value.path : value.kind;\n}\nfunction commandOutcome(value: CommandDetail[\"outcome\"]): string {\n if (value.kind === \"exited\")\n return `exited; code ${value.exitCode}`;\n return `${value.kind}; ${value.reason}`;\n}\nexport function renderTiming(value: TimingView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Timing ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Activities\", value: String(value.activities.length) },\n {\n key: \"Omitted activities\",\n value: value.hasMore ? String(value.omittedActivityCount) : \"0\",\n },\n { key: \"Limitations\", value: String(value.limitations.length) },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n projectionLimitationTable(value.limitations),\n { kind: \"divider\", title: \"Activities\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Activity ID\" },\n { header: \"Parent\" },\n { header: \"Turn\" },\n { header: \"Phase\" },\n { header: \"Label\" },\n { header: \"Start\" },\n { header: \"Duration\" },\n { header: \"Outcome\" },\n ],\n rows: value.activities.map((activity) => [\n activity.activityId,\n activity.parentActivityId ?? \"none\",\n activity.turnId ?? \"none\",\n activity.phase,\n activity.label,\n `${fmt(activity.startOffsetMs)} ms`,\n `${fmt(activity.durationMs)} ms`,\n activity.outcome,\n ]),\n },\n ],\n },\n ]);\n}\ntype UsageTotals = UsageView[\"totals\"];\nfunction numericUsageTotal(total: UsageTotals[\"inputTokens\"]): string {\n return `${total.value === null ? \"not-recorded\" : fmt(total.value)} (${total.state}; ${total.observationCount} observations)`;\n}\nfunction usageTotalEntries(totals: UsageTotals): readonly {\n readonly key: string;\n readonly value: string;\n}[] {\n return [\n { key: \"Input tokens\", value: numericUsageTotal(totals.inputTokens) },\n { key: \"Output tokens\", value: numericUsageTotal(totals.outputTokens) },\n { key: \"Requests\", value: numericUsageTotal(totals.requests) },\n {\n key: \"Provider costs\",\n value: `${totals.providerCosts.state}; ${totals.providerCosts.observationCount} observations${totals.providerCosts.values.length === 0\n ? \"; no recorded values\"\n : `; ${totals.providerCosts.values.map((cost) => `${cost.value} ${cost.currency} (${cost.observationCount} observations)`).join(\"; \")}`}`,\n },\n ];\n}\nexport function renderUsage(value: UsageView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Usage ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n ...usageTotalEntries(value.totals),\n {\n key: \"Limitations\",\n value: boundedPreview(value.limitations.length, value.limitationsTruncated, value.omittedLimitationCount),\n },\n {\n key: \"Turns\",\n value: boundedPreview(value.turns.length, value.turnsTruncated, value.omittedTurnCount),\n },\n {\n key: \"Omitted observations\",\n value: value.hasMore ? String(value.omittedObservationCount) : \"0\",\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: value.limitations.map((limitation) => [\n formatUsageLimitation(limitation),\n ]),\n overflow: \"wrap\",\n },\n { kind: \"divider\", title: \"Provider costs\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Currency\" },\n { header: \"Value\" },\n { header: \"State\" },\n { header: \"Observations\" },\n ],\n rows: value.totals.providerCosts.values.map((cost) => [\n cost.currency,\n cost.value,\n value.totals.providerCosts.state,\n String(cost.observationCount),\n ]),\n },\n { kind: \"divider\", title: \"Turn coverage\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Turn\" },\n { header: \"Coverage\" },\n { header: \"Reason\" },\n ],\n rows: value.turns.map((turn) => [\n turn.turnId,\n turn.coverage.state,\n turn.coverage.state === \"complete\" ? \"none\" : turn.coverage.reason,\n ]),\n },\n { kind: \"divider\", title: \"Observation provenance\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Turn\" },\n { header: \"Observation ID\" },\n { header: \"Kind\" },\n { header: \"Provider\" },\n { header: \"Recorded value\" },\n ],\n rows: value.observations.map((observation) => [\n observation.turnId,\n observation.usageObservationId,\n observation.kind,\n observation.provider,\n usageObservationValue(observation),\n ]),\n overflow: \"wrap\",\n },\n ],\n },\n ]);\n}\nfunction usageObservationValue(value: UsageView[\"observations\"][number]): string {\n switch (value.kind) {\n case \"token-bucket\":\n return `${value.bucket}; ${value.tokens} tokens`;\n case \"request\":\n return value.requestKind;\n case \"provider-cost\":\n return `${value.amount} ${value.currency}`;\n }\n}\nexport function renderDiff(value: DiffView): string {\n const statusBlocks: TerminalPanelContentBlock[] = [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Windows\", value: String(value.windows.length) },\n ],\n },\n ];\n if (value.state === \"invalid\") {\n statusBlocks.push({ kind: \"divider\", title: \"Issues\" }, {\n kind: \"table\",\n columns: [{ header: \"Issue\" }],\n rows: value.issues.map((issue) => [issue]),\n overflow: \"wrap\",\n });\n }\n if (value.state === \"complete\" || value.state === \"partial\") {\n statusBlocks.push({ kind: \"divider\", title: \"Limitations\" }, {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: value.limitations.map((limitation) => [\n formatDiffLimitation(limitation),\n ]),\n overflow: \"wrap\",\n });\n }\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Diff ${value.locator}`,\n meta: value.state,\n blocks: statusBlocks,\n },\n ];\n for (const window of value.windows) {\n blocks.push({\n kind: \"panel\",\n title: `Window ${window.windowId}`,\n meta: `sequence ${window.sequence}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [{ key: \"Changes\", value: String(window.changes.length) }],\n },\n ],\n });\n for (const change of window.changes) {\n blocks.push({\n kind: \"panel\",\n title: `Change ${change.changeId}`,\n meta: change.kind,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Path\", value: change.path },\n { key: \"Before\", value: fileEndpoint(change.before) },\n { key: \"After\", value: fileEndpoint(change.after) },\n ],\n },\n ],\n });\n }\n }\n return terminal(blocks);\n}\ntype DiffLimitation = Extract<DiffView, {\n readonly state: \"complete\" | \"partial\";\n}>[\"limitations\"][number];\nfunction formatDiffLimitation(value: DiffLimitation): string {\n switch (value.code) {\n case \"capture-failed\":\n case \"capture-interrupted\":\n return `${value.code}; stage ${value.stage}; window ${value.atWindowId ?? \"not-recorded\"}`;\n case \"collection-cap-reached\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}; window ${value.atWindowId ?? \"not-recorded\"}`;\n case \"unsupported-input\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}`;\n }\n}\ntype DiffEndpoint = Extract<DiffView[\"windows\"][number][\"changes\"][number][\"before\"], {\n readonly state: \"absent\" | \"present\";\n}>;\nfunction fileEndpoint(value: DiffEndpoint): string {\n if (value.state === \"absent\")\n return \"absent\";\n const revision = value.revision;\n if (revision.kind === \"text\") {\n return `text; ${revision.content}; ${revision.byteLength} bytes; ${revision.sha256}`;\n }\n if (revision.kind === \"elided\") {\n return `elided; ${revision.reason}; ${revision.byteLength} bytes`;\n }\n return `unavailable; ${revision.reason}`;\n}\nexport function traceSelector(value: TraceView, id: string) {\n if (value.identities.itemIds.includes(id)) {\n return { kind: \"item\" as const, itemId: id };\n }\n if (value.identities.toolOccurrenceIds.includes(id)) {\n return { kind: \"tool-occurrence\" as const, toolOccurrenceId: id };\n }\n if (value.identities.commandIds.includes(id)) {\n return { kind: \"command\" as const, commandId: id };\n }\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["render.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderTerminal, type TerminalBlock, type TerminalPanelContentBlock, } from \"../terminal/index.ts\";\nimport type { Aggregate, AttemptView, DiffView, ExperimentView, ExecutionValue, Metric, OverviewView, RunView, ScoredValue, SourcesView, TimingView, TraceDetailView, TraceItem, TraceView, UsageView, } from \"./model.ts\";\nconst TERMINAL_OPTIONS = Object.freeze({ width: 80, mode: \"plain\" as const });\nconst terminal = (blocks: readonly TerminalBlock[]): string => renderTerminal(blocks, TERMINAL_OPTIONS);\nconst fmt = (value: number): string => Number.isInteger(value)\n ? String(value)\n : value.toFixed(2).replace(/0+$/u, \"\").replace(/\\.$/u, \"\");\nconst metric = (value: Metric, formatValue: (value: number) => string = fmt): string => {\n if (value.value === null)\n return value.state;\n const rendered = formatValue(value.value);\n return value.state === \"available\"\n ? rendered\n : `${rendered} (${value.state})`;\n};\nconst passRate = (value: Metric): string => metric(value, (rate) => `${fmt(rate * 100)}%`);\nconst duration = (value: Metric): string => metric(value, (milliseconds) => {\n if (milliseconds < 1000)\n return `${fmt(milliseconds)} ms`;\n if (milliseconds < 60000)\n return `${fmt(milliseconds / 1000)} s`;\n if (milliseconds < 3600000)\n return `${fmt(milliseconds / 60000)} min`;\n return `${fmt(milliseconds / 3600000)} h`;\n});\nconst score = (value: ScoredValue): string => value.state === \"not-scored\"\n ? value.state\n : `${fmt(value.earned)}/${fmt(value.possible)} (${value.state}${value.state === \"unavailable\"\n ? `; ${value.unavailable} unavailable`\n : \"\"})`;\nconst aggregateEntries = (value: Aggregate): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} => ({\n kind: \"keyValue\",\n entries: [\n { key: \"Observed\", value: `${value.observed}/${value.expected}` },\n ...(value.evaluationKind === \"points\"\n ? [{\n key: \"Outcomes\",\n value: `${value.passed} scored; ${value.errored} errored; ${value.skipped} skipped`,\n }]\n : [{\n key: \"Verdicts\",\n value: value.failed === 0 && value.errored === 0 && value.skipped === 0\n ? `${value.passed} passed`\n : `${value.passed} passed; ${value.failed} failed; ${value.errored} errored; ${value.skipped} skipped`,\n }, { key: \"Pass rate\", value: passRate(value.passRate) }]),\n ...(value.evaluationKind === \"pass\"\n ? []\n : [{ key: \"Score\", value: metric(value.score) }]),\n { key: \"Duration\", value: duration(value.durationMs) },\n { key: \"Tokens\", value: metric(value.tokens) },\n ],\n});\ninterface ExperimentGroup {\n readonly name: string | null;\n readonly experiments: OverviewView[\"experiments\"];\n}\nfunction experimentGroup(experimentId: string): string | null {\n const separator = experimentId.indexOf(\"/\");\n return separator <= 0 ? null : experimentId.slice(0, separator);\n}\nfunction relativeToGroup(id: string, group: string | null): string {\n const prefix = group === null ? \"\" : `${group}/`;\n return prefix !== \"\" && id.startsWith(prefix) ? id.slice(prefix.length) : id;\n}\nfunction groupExperiments(value: OverviewView): readonly ExperimentGroup[] {\n const groups = new Map<string | null, OverviewView[\"experiments\"][number][]>();\n for (const experiment of value.experiments) {\n const group = experimentGroup(experiment.experimentId);\n const members = groups.get(group) ?? [];\n members.push(experiment);\n groups.set(group, members);\n }\n return [...groups].map(([name, experiments]) => ({ name, experiments }));\n}\nconst attemptBlocks = (cells: OverviewView[\"cells\"], group: string | null, all: boolean): readonly TerminalPanelContentBlock[] => {\n let shownErrors = 0;\n return cells.flatMap((cell) => {\n const showScore = cell.aggregate.evaluationKind !== \"pass\";\n const showScoreOutcome = cell.aggregate.evaluationKind === \"points\";\n const members = all\n ? cell.members\n : cell.members.filter((member) => {\n if (member.publication.state !== \"published\")\n return true;\n if (member.publication.verdict === \"passed\" ||\n member.publication.verdict === \"failed\")\n return false;\n if (member.publication.verdict !== \"errored\")\n return true;\n shownErrors += 1;\n return shownErrors <= 5;\n });\n if (cell.members.length > 0 && members.length === 0)\n return [];\n return [\n {\n kind: \"divider\" as const,\n title: `Eval ${relativeToGroup(cell.evalId, group)}`,\n attachNext: true,\n },\n {\n kind: \"table\" as const,\n columns: [\n { header: \"Attempt\", maxWidth: 14 },\n { header: showScoreOutcome ? \"Outcome\" : \"Verdict\" },\n { header: \"Duration\" },\n ...(showScore ? [{ header: \"Score\" }] : []),\n ],\n overflow: \"wrap\" as const,\n rows: members.length === 0\n ? [[\n \"not-recorded\",\n \"not-recorded\",\n duration(cell.aggregate.durationMs),\n ...(showScore ? [metric(cell.aggregate.score)] : []),\n ]]\n : members.map((member) => [\n member.publication.state === \"published\"\n ? member.publication.attemptLocator\n : member.publication.state === \"absent\"\n ? `absent (${member.publication.reason})`\n : \"pending\",\n member.publication.state === \"published\"\n ? showScoreOutcome\n ? member.publication.verdict === \"passed\"\n ? \"scored\"\n : member.publication.verdict ?? \"not-recorded\"\n : member.publication.verdict ?? \"not-recorded\"\n : member.publication.state,\n member.publication.state === \"published\"\n ? duration(member.publication.durationMs)\n : member.publication.state,\n ...(showScore\n ? [member.publication.state === \"published\"\n ? metric(member.publication.score)\n : member.publication.state]\n : []),\n ]),\n },\n ];\n });\n};\nconst hiddenAttemptSummary = (cells: OverviewView[\"cells\"]): string | null => {\n const counts = { passed: 0, failed: 0, scored: 0, errored: 0 };\n for (const cell of cells) {\n for (const member of cell.members) {\n if (member.publication.state !== \"published\")\n continue;\n const verdict = member.publication.verdict;\n if (verdict === \"passed\") {\n counts[cell.aggregate.evaluationKind === \"points\" ? \"scored\" : \"passed\"] += 1;\n }\n else if (verdict === \"failed\" || verdict === \"errored\") {\n counts[verdict] += 1;\n }\n }\n }\n const hidden = [\n ...(counts.passed > 0 ? [`${counts.passed} passed`] : []),\n ...(counts.failed > 0 ? [`${counts.failed} failed`] : []),\n ...(counts.scored > 0 ? [`${counts.scored} scored`] : []),\n ...(counts.errored > 5 ? [`${counts.errored - 5} errored`] : []),\n ];\n return hidden.length === 0 ? null : `${hidden.join(\"; \")} Attempts hidden`;\n};\nconst compactContinuation = (cells: OverviewView[\"cells\"], experimentId: string, all: boolean): readonly TerminalPanelContentBlock[] => {\n if (all)\n return [];\n const hidden = hiddenAttemptSummary(cells);\n return hidden === null\n ? []\n : [\n {\n kind: \"divider\",\n title: hidden,\n attachNext: true,\n },\n {\n kind: \"keyValue\",\n entries: [{\n key: \"See more\",\n value: `niceeval show --experiment ${experimentId}`,\n }],\n },\n ];\n};\nconst stateCount = (state: string, count: number, noun: string): string => `${state}; ${count} ${noun}s`;\nconst textOrNotRecorded = (value: string | null | undefined): string => value ?? \"not-recorded\";\nexport function renderOverview(value: OverviewView, options: {\n readonly all?: boolean;\n} = {}): string {\n const all = options.all === true;\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: \"NiceEval results\",\n blocks: [\n { kind: \"divider\", title: \"Totals\" },\n aggregateEntries(value.totals),\n ],\n },\n ];\n if (value.experiments.length > 0) {\n const groups = groupExperiments(value);\n blocks.push({\n kind: \"panel\",\n title: \"Experiments\",\n blocks: groups.flatMap((group) => {\n const showPassRate = group.experiments.some(({ aggregate }) => aggregate.evaluationKind !== \"points\");\n const showScore = group.experiments.some(({ aggregate }) => aggregate.evaluationKind !== \"pass\");\n return [\n ...(group.name === null\n ? []\n : [{ kind: \"divider\" as const, title: group.name }]),\n {\n kind: \"table\" as const,\n columns: [\n { header: \"Experiment\" },\n { header: \"Observed\" },\n { header: \"Agent\" },\n { header: \"Model\" },\n ...(showPassRate ? [{ header: \"Pass rate\" }] : []),\n ...(showScore ? [{ header: \"Score\" }] : []),\n ],\n rows: group.experiments.map((experiment) => [\n relativeToGroup(experiment.experimentId, group.name),\n `${experiment.aggregate.observed}/${experiment.aggregate.expected}`,\n executionValue(experiment.agent),\n executionValue(experiment.model),\n ...(showPassRate ? [passRate(experiment.aggregate.passRate)] : []),\n ...(showScore ? [metric(experiment.aggregate.score)] : []),\n ]),\n },\n ];\n }),\n });\n }\n if (value.cells.length > 0) {\n for (const group of groupExperiments(value)) {\n const experimentIds = new Set(group.experiments.map(({ experimentId }) => experimentId));\n const cells = value.cells.filter(({ experimentId }) => experimentIds.has(experimentId));\n blocks.push({\n kind: \"panel\",\n title: group.name === null ? \"Attempts\" : `Attempts · ${group.name}`,\n blocks: group.experiments.flatMap((experiment) => {\n const experimentCells = cells.filter(({ experimentId }) => experimentId === experiment.experimentId);\n return [\n {\n kind: \"divider\" as const,\n title: `Experiment ${experiment.experimentId}`,\n },\n ...attemptBlocks(experimentCells, group.name, all),\n ...compactContinuation(experimentCells, experiment.experimentId, all),\n ];\n }),\n });\n }\n }\n return terminal(blocks);\n}\nexport function renderExperiment(value: ExperimentView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Experiment ${value.experimentId}`,\n blocks: [\n { kind: \"divider\", title: \"Summary\" },\n aggregateEntries(value.aggregate),\n { kind: \"divider\", title: \"Attempts\" },\n ...attemptBlocks(value.cells, null, true),\n ],\n },\n ]);\n}\nfunction executionValue(value: ExecutionValue): string {\n return value.state === \"available\" ? value.value : value.state;\n}\nexport function renderRun(value: RunView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Run ${value.runId}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Experiment\", value: value.experimentId },\n { key: \"State\", value: \"sealed\" },\n { key: \"Started\", value: new Date(value.startedAt).toISOString() },\n {\n key: \"Completed\",\n value: new Date(value.completedAt).toISOString(),\n },\n {\n key: \"Summary\",\n value: `${value.observed}/${value.expected} attempts observed`,\n },\n ],\n },\n { kind: \"divider\", title: \"Coverage\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.coverage.state },\n {\n key: \"Members\",\n value: `${value.coverage.observedMemberCount}/${value.coverage.expectedMemberCount} observed; ${value.coverage.completeMemberCount} complete`,\n },\n { key: \"Facts\", value: String(value.coverage.factCount) },\n {\n key: \"Limitations\",\n value: String(value.coverage.limitations.length),\n },\n ],\n },\n { kind: \"divider\", title: \"Usage\" },\n runUsageBlocks(value.usage),\n { kind: \"divider\", title: \"Limitations\" },\n runLocatedLimitationTable(value.limitations),\n ],\n },\n ];\n for (const member of value.members) {\n blocks.push({\n kind: \"panel\",\n title: `Member ${member.slotId}`,\n meta: member.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Eval\", value: member.evalId },\n { key: \"Attempt ordinal\", value: String(member.attemptOrdinal) },\n { key: \"Attempt\", value: member.locator ?? \"not-recorded\" },\n { key: \"Relation\", value: member.relation ?? \"not-recorded\" },\n { key: \"Outcome\", value: member.outcome ?? \"not-recorded\" },\n { key: \"Verdict\", value: member.verdict ?? \"not-recorded\" },\n {\n key: \"Score\",\n value: member.score === null ? \"not-recorded\" : score(member.score),\n },\n ],\n },\n { kind: \"divider\", title: \"Coverage\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: member.coverage.state },\n { key: \"Facts\", value: String(member.coverage.facts.length) },\n {\n key: \"Limitations\",\n value: String(member.coverage.limitations.length),\n },\n ],\n },\n { kind: \"divider\", title: \"Usage\" },\n memberUsageBlocks(member.usage),\n { kind: \"divider\", title: \"Limitations\" },\n runMemberLimitationTable(member.limitations),\n ],\n });\n }\n return terminal(blocks);\n}\nfunction runUsageBlocks(value: RunView[\"usage\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n {\n key: \"Members\",\n value: `${value.observedMemberCount}/${value.expectedMemberCount} observed; ${value.recordedAttemptCount} recorded attempts`,\n },\n ...usageTotalEntries(value.totals),\n { key: \"Limitations\", value: String(value.limitations.length) },\n ],\n };\n}\nfunction memberUsageBlocks(value: RunView[\"members\"][number][\"usage\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n {\n key: \"Summary\",\n value: value.summary === null\n ? \"not-recorded\"\n : `${value.summary.turnCount} turns; ${value.summary.observationCount} observations`,\n },\n ...usageTotalEntries(value.totals),\n {\n key: \"Limitations\",\n value: boundedPreview(value.limitations.length, value.limitationsTruncated, value.omittedLimitationCount),\n },\n ],\n };\n}\ntype RunMemberLimitation = RunView[\"members\"][number][\"limitations\"][number];\nfunction runMemberLimitationTable(values: readonly RunMemberLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: values.map((value) => [formatRunMemberLimitation(value)]),\n overflow: \"wrap\",\n };\n}\nfunction runLocatedLimitationTable(values: RunView[\"limitations\"]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [\n { header: \"Slot\" },\n { header: \"Attempt\" },\n { header: \"Limitation\" },\n ],\n rows: values.map((value) => [\n value.slotId,\n value.locator ?? \"not-recorded\",\n formatRunMemberLimitation(value.limitation),\n ]),\n overflow: \"wrap\",\n };\n}\nfunction formatRunMemberLimitation(value: RunMemberLimitation): string {\n switch (value.kind) {\n case \"member-not-observed\":\n return `${value.kind}; ${value.state}`;\n case \"attempt-unresolved\":\n return `${value.kind}; run ${value.originRunId}; attempt ${value.attemptId}`;\n case \"coverage\":\n return `${value.kind}; ${formatAttemptLimitation(value.detail)}`;\n case \"usage\":\n return `${value.kind}; ${formatUsageLimitation(value.detail)}`;\n }\n}\ntype AttemptLimitation = RunView[\"members\"][number][\"coverage\"][\"limitations\"][number];\nfunction formatAttemptLimitation(value: AttemptLimitation): string {\n if (\"channel\" in value) {\n return `${value.channel}; ${value.status}${value.reason === undefined ? \"\" : `; ${value.reason}`}`;\n }\n return `assertion-material; ${value.state}; ${value.reason}; ${value.limitations.length} material limitations`;\n}\nexport function renderAttempt(value: AttemptView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Attempt ${value.locator}`,\n meta: value.verdict ?? value.outcome,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Experiment\", value: value.experimentId },\n { key: \"Eval\", value: value.evalId },\n { key: \"Run\", value: value.originRunId },\n { key: \"Attempt\", value: value.attemptId },\n { key: \"Slot\", value: value.slotId },\n { key: \"Outcome\", value: value.outcome },\n { key: \"Verdict\", value: value.verdict ?? \"not-available\" },\n { key: \"Score\", value: score(value.score) },\n ],\n },\n {\n kind: \"divider\",\n title: `assertions ${value.sections.assertions} · ${value.assertions.entries.length} entries`,\n },\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Summary\",\n value: stateCount(value.sections.assertions, value.assertions.entries.length, \"entry\"),\n },\n ],\n },\n {\n kind: \"table\",\n columns: [\n { header: \"Assertion\" },\n { header: \"Entry ID\" },\n { header: \"Group\" },\n ],\n rows: value.assertions.entries.map((entry) => [\n entry.label ?? entry.key ?? entry.entryId,\n entry.entryId,\n entry.groupPath.length === 0 ? \"root\" : entry.groupPath.join(\" / \"),\n ]),\n },\n { kind: \"divider\", title: \"Evidence\" },\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"coverage\",\n value: value.evidenceCoverage.length === 0\n ? \"none\"\n : value.evidenceCoverage.join(\"; \"),\n },\n {\n key: \"limitations\",\n value: value.limitations.length === 0\n ? \"none\"\n : value.limitations.join(\"; \"),\n },\n ],\n },\n { kind: \"divider\", title: \"Sections\" },\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Source\", value: value.sections.sources },\n { key: \"Execution\", value: value.sections.trace },\n { key: \"Timing\", value: value.sections.timing },\n { key: \"Usage\", value: value.sections.usage },\n { key: \"Diff\", value: value.sections.diff },\n ],\n },\n { kind: \"divider\", title: \"Next\" },\n { kind: \"command\", command: `niceeval show ${value.locator} --source` },\n {\n kind: \"command\",\n command: `niceeval show ${value.locator} --execution`,\n },\n { kind: \"command\", command: `niceeval show ${value.locator} --timing` },\n { kind: \"command\", command: `niceeval show ${value.locator} --usage` },\n { kind: \"command\", command: `niceeval show ${value.locator} --diff` },\n ],\n },\n ]);\n}\nexport function renderSources(value: SourcesView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Captured source ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Captured items\", value: String(value.items.length) },\n {\n key: \"Omitted items\",\n value: value.hasMore ? String(value.omittedItemCount) : \"0\",\n },\n ],\n },\n ],\n },\n ];\n for (const item of value.items) {\n blocks.push({\n kind: \"panel\",\n title: `${item.path} · ${item.sourceItemId} · ${item.byteLength} bytes`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Bytes\", value: String(item.byteLength) },\n { key: \"Content\", value: item.content.state },\n ...(item.content.state === \"omitted\"\n ? [\n { key: \"Reason\", value: item.content.reason },\n {\n key: \"Byte limit\",\n value: `${item.content.byteLimit}/${item.content.byteLength} retained`,\n },\n ]\n : []),\n ],\n },\n ],\n });\n if (item.content.state === \"available\") {\n blocks.push({ kind: \"code\", text: item.content.text });\n }\n }\n blocks.push({\n kind: \"panel\",\n title: \"Assertion source facts\",\n meta: value.assertions.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Source sites\",\n value: String(value.assertions.sites.length),\n },\n {\n key: \"Omitted source sites\",\n value: value.assertions.hasMoreSourceSites === true\n ? String(value.assertions.omittedSourceSiteCount ?? 0)\n : \"0\",\n },\n ],\n },\n ],\n }, {\n kind: \"raw\",\n text: value.assertions.sites.map((site) => `${site.entryId} · ${site.role} · ${sourceRange(site.start, site.end)} · ${site.source.state === \"mapped\"\n ? `mapped · ${site.source.sourceItemId} · ${site.source.sha256}`\n : `unmapped · ${site.source.reason}`}`).join(\"\\n\"),\n });\n return terminal(blocks);\n}\nfunction sourceRange(start: SourcesView[\"assertions\"][\"sites\"][number][\"start\"], end: SourcesView[\"assertions\"][\"sites\"][number][\"end\"]): string {\n return `start ${start.line}:${start.column} · end ${end.line}:${end.column}`;\n}\nexport function renderTrace(value: TraceView): string {\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Execution ${value.locator}`,\n blocks: [],\n },\n {\n kind: \"panel\",\n title: `Conversation · ${value.conversation.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Turns\",\n value: boundedPreview(value.conversation.turns.length, value.conversation.turnsTruncated, value.conversation.omittedTurnCount),\n },\n {\n key: \"Items\",\n value: boundedPreview(value.conversation.itemCount, value.conversation.itemsTruncated, value.conversation.omittedItemCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.conversation.limitations.length, value.conversation.limitationsTruncated, value.conversation.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.conversation.limitations),\n ],\n },\n ];\n for (const turn of value.conversation.turns) {\n blocks.push({\n kind: \"panel\",\n title: `Turn ${turn.turnId}`,\n meta: turn.outcome,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Sequence\", value: String(turn.sequence) },\n { key: \"Items\", value: String(turn.items.length) },\n ],\n },\n ],\n });\n for (const item of turn.items)\n blocks.push(...traceItemBlocks(item));\n }\n blocks.push({\n kind: \"panel\",\n title: `Commands · ${value.commands.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Items\",\n value: boundedPreview(value.commands.items.length, value.commands.hasMore, value.commands.omittedCommandCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.commands.limitations.length, value.commands.limitationsTruncated, value.commands.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.commands.limitations),\n { kind: \"divider\", title: \"Command outline\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Command ID\" },\n { header: \"Phase\" },\n { header: \"Outcome\" },\n ],\n rows: value.commands.items.map((command) => [\n command.commandId,\n command.phase,\n command.outcome,\n ]),\n },\n ],\n });\n blocks.push({\n kind: \"panel\",\n title: `Diagnostics · ${value.diagnostics.state}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Items\",\n value: boundedPreview(value.diagnostics.items.length, value.diagnostics.hasMore, value.diagnostics.omittedDiagnosticCount),\n },\n {\n key: \"Limitations\",\n value: boundedPreview(value.diagnostics.limitations.length, value.diagnostics.limitationsTruncated, value.diagnostics.omittedLimitationCount),\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n limitationTable(value.diagnostics.limitations),\n { kind: \"divider\", title: \"Diagnostic outline\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Diagnostic ID\" },\n { header: \"Phase\" },\n { header: \"Kind\" },\n { header: \"Code\" },\n { header: \"Summary\" },\n ],\n rows: value.diagnostics.items.map((diagnostic) => [\n diagnostic.diagnosticId,\n diagnostic.phase,\n diagnostic.kind,\n diagnostic.code,\n diagnostic.summary,\n ]),\n overflow: \"wrap\",\n },\n ],\n });\n blocks.push({ kind: \"panel\", title: \"Stable identities\", blocks: [] }, {\n kind: \"raw\",\n text: [\n ...value.identities.itemIds.map((id) => `item ${id}`),\n ...value.identities.toolOccurrenceIds.map((id) => `tool occurrence ${id}`),\n ...value.identities.commandIds.map((id) => `command ${id}`),\n ].join(\"\\n\"),\n });\n return terminal(blocks);\n}\nfunction boundedPreview(shown: number, truncated: boolean, omitted: number): string {\n return `${shown} shown; ${truncated ? `bounded preview, ${omitted} omitted` : \"complete preview, 0 omitted\"}`;\n}\ntype ProjectionLimitation = TimingView[\"limitations\"][number] | TraceView[\"conversation\"][\"limitations\"][number] | TraceView[\"diagnostics\"][\"limitations\"][number];\nfunction limitationTable(limitations: readonly ProjectionLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: limitations.map((limitation) => [formatProjectionLimitation(limitation)]),\n overflow: \"wrap\",\n };\n}\nfunction projectionLimitationTable(limitations: readonly ProjectionLimitation[]): TerminalPanelContentBlock & {\n readonly kind: \"table\";\n} {\n return limitationTable(limitations);\n}\nfunction formatProjectionLimitation(value: ProjectionLimitation): string {\n if (\"issue\" in value)\n return `invalid projection; ${value.issue}`;\n if (\"source\" in value) {\n if (value.source === \"agent-turns\") {\n return `${value.source}; turn ${value.turnId}; ${value.channel}; ${value.state}; ${value.reason}`;\n }\n const details = value.limitations.map(formatProjectionLimitation).join(\"; \");\n return `${value.source}; ${value.state}${details.length === 0 ? \"\" : `; ${details}`}`;\n }\n switch (value.code) {\n case \"capture-failed\":\n case \"capture-interrupted\":\n return `${value.code}; stage ${value.stage}; target ${value.target}`;\n case \"collection-cap-reached\":\n case \"unsupported-input\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}`;\n case \"text-truncated\":\n case \"redacted\":\n case \"invalid-utf8-replaced\":\n case \"unsafe-control-stripped\":\n return `${value.code}; target ${value.target}; replaced or omitted ${value.replacementOrOmittedCount}`;\n }\n}\ntype UsageLimitation = UsageView[\"limitations\"][number];\nfunction formatUsageLimitation(value: UsageLimitation): string {\n if (\"source\" in value) {\n return `${value.source}; turn ${value.turnId}; ${value.channel}; ${value.state}; ${value.reason}`;\n }\n return formatProjectionLimitation(value);\n}\nfunction traceItemBlocks(item: TraceItem): readonly TerminalBlock[] {\n const entries: {\n key: string;\n value: string;\n }[] = [\n { key: \"Kind\", value: item.kind },\n { key: \"Sequence\", value: String(item.sequence) },\n ];\n let content: string | null = null;\n switch (item.kind) {\n case \"message\":\n entries.push({ key: \"Role\", value: item.role });\n content = item.text;\n break;\n case \"tool-call\":\n entries.push({ key: \"Tool\", value: item.tool }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.input;\n break;\n case \"tool-result\":\n entries.push({ key: \"Outcome\", value: item.outcome }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.output;\n break;\n case \"thinking-summary\":\n case \"compaction\":\n case \"context-injection\":\n content = item.summary;\n break;\n case \"subagent\":\n entries.push({ key: \"State\", value: item.state }, { key: \"Label\", value: item.label });\n content = item.summary;\n break;\n case \"input-request\":\n entries.push({ key: \"State\", value: item.state });\n content = `Prompt: ${item.prompt}\\nResponse: ${textOrNotRecorded(item.response)}`;\n break;\n case \"skill-load\":\n case \"conversation-error\":\n entries.push({ key: \"Code\", value: item.code });\n content = item.summary;\n break;\n }\n return [\n {\n kind: \"panel\",\n title: `Item ${item.itemId}`,\n blocks: [{ kind: \"keyValue\", entries }],\n },\n ...(content === null ? [] : [{ kind: \"code\" as const, text: content }]),\n ];\n}\nexport function renderTraceDetail(value: TraceDetailView): string {\n const body = value.body;\n const heading: TerminalBlock = {\n kind: \"panel\",\n title: `Execution detail ${value.locator}`,\n meta: `${value.kind} ${value.stableId}`,\n blocks: [],\n };\n if (body.kind === \"item\") {\n return terminal([heading, ...traceDetailItemBlocks(body.item)]);\n }\n if (body.kind === \"tool-occurrence\") {\n return terminal([\n heading,\n {\n kind: \"panel\",\n title: \"Occurrence turns\",\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n {\n key: \"Call\",\n value: body.turn.call === null\n ? \"not-recorded\"\n : `${body.turn.call.turnId}; sequence ${body.turn.call.sequence}; ${body.turn.call.outcome}`,\n },\n {\n key: \"Result\",\n value: body.turn.result === null\n ? \"not-recorded\"\n : `${body.turn.result.turnId}; sequence ${body.turn.result.sequence}; ${body.turn.result.outcome}`,\n },\n ],\n },\n ],\n },\n ...(body.call === null\n ? [{\n kind: \"panel\" as const,\n title: \"Call\",\n meta: \"not-recorded\",\n blocks: [],\n }]\n : traceDetailItemBlocks(body.call, \"Call\")),\n ...(body.result === null\n ? [{\n kind: \"panel\" as const,\n title: \"Result\",\n meta: \"not-recorded\",\n blocks: [],\n }]\n : traceDetailItemBlocks(body.result, \"Result\")),\n ]);\n }\n return terminal([\n heading,\n {\n kind: \"panel\",\n title: `Command ${body.commandId}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Invocation\", value: commandInvocation(body.invocation) },\n {\n key: \"Working directory\",\n value: workingDirectory(body.workingDirectory),\n },\n { key: \"Outcome\", value: commandOutcome(body.outcome) },\n { key: \"Turn\", value: body.turnId ?? \"not-recorded\" },\n { key: \"Phase\", value: body.phase },\n { key: \"Sequence\", value: String(body.sequence) },\n ],\n },\n { kind: \"divider\", title: \"stdout\" },\n streamMetadata(body.stdout),\n { kind: \"divider\", title: \"stderr\" },\n streamMetadata(body.stderr),\n ],\n },\n { kind: \"code\", text: body.stdout.text },\n { kind: \"code\", text: body.stderr.text },\n ]);\n}\ntype TraceDetailItem = Extract<TraceDetailView[\"body\"], {\n readonly kind: \"item\";\n}>[\"item\"];\nfunction traceDetailItemBlocks(item: TraceDetailItem, title = `Item ${item.itemId}`): readonly TerminalBlock[] {\n const entries: {\n key: string;\n value: string;\n }[] = [\n { key: \"Item ID\", value: item.itemId },\n { key: \"Kind\", value: item.kind },\n { key: \"Turn\", value: item.turnId },\n { key: \"Turn sequence\", value: String(item.turnSequence) },\n { key: \"Turn outcome\", value: item.turnOutcome },\n { key: \"Session\", value: item.sessionId ?? \"not-recorded\" },\n { key: \"Event\", value: item.eventId ?? \"not-recorded\" },\n {\n key: \"Sequence\",\n value: item.sequence === undefined ? \"not-recorded\" : String(item.sequence),\n },\n ];\n let content: string | null = null;\n switch (item.kind) {\n case \"message\":\n entries.push({ key: \"Role\", value: item.role });\n content = item.text;\n break;\n case \"tool-call\":\n entries.push({ key: \"Tool\", value: item.tool }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.input;\n break;\n case \"tool-result\":\n entries.push({ key: \"Outcome\", value: item.outcome }, {\n key: \"Tool occurrence\",\n value: item.toolOccurrenceId ?? \"not-recorded\",\n });\n content = item.output;\n break;\n case \"thinking-summary\":\n case \"compaction\":\n case \"context-injection\":\n content = item.summary;\n break;\n case \"subagent\":\n entries.push({ key: \"State\", value: item.state }, { key: \"Label\", value: item.label });\n content = item.summary;\n break;\n case \"input-request\":\n entries.push({ key: \"State\", value: item.state });\n content = `Prompt: ${item.prompt}\\nResponse: ${textOrNotRecorded(item.response)}`;\n break;\n case \"skill-load\":\n case \"conversation-error\":\n entries.push({ key: \"Code\", value: item.code });\n content = item.summary;\n break;\n }\n return [\n {\n kind: \"panel\",\n title,\n blocks: [{ kind: \"keyValue\", entries }],\n },\n ...(content === null ? [] : [{ kind: \"code\" as const, text: content }]),\n ];\n}\ntype CommandDetail = Extract<TraceDetailView[\"body\"], {\n readonly kind: \"command\";\n}>;\nfunction streamMetadata(stream: CommandDetail[\"stdout\"]): TerminalPanelContentBlock & {\n readonly kind: \"keyValue\";\n} {\n return {\n kind: \"keyValue\",\n entries: [\n { key: \"Retained bytes\", value: String(stream.retainedBytes) },\n { key: \"Total safe UTF-8 bytes\", value: String(stream.totalSafeUtf8Bytes) },\n { key: \"SHA-256\", value: stream.sha256 },\n { key: \"Truncation\", value: stream.truncation.state },\n {\n key: \"Omitted safe UTF-8 bytes\",\n value: String(stream.truncation.omittedSafeUtf8Bytes),\n },\n ],\n };\n}\nfunction commandInvocation(value: CommandDetail[\"invocation\"]): string {\n return value.kind === \"shell\"\n ? value.command\n : [value.executable, ...value.arguments].join(\" \");\n}\nfunction workingDirectory(value: CommandDetail[\"workingDirectory\"]): string {\n return value.kind === \"project-relative\" ? value.path : value.kind;\n}\nfunction commandOutcome(value: CommandDetail[\"outcome\"]): string {\n if (value.kind === \"exited\")\n return `exited; code ${value.exitCode}`;\n return `${value.kind}; ${value.reason}`;\n}\nexport function renderTiming(value: TimingView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Timing ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Activities\", value: String(value.activities.length) },\n {\n key: \"Omitted activities\",\n value: value.hasMore ? String(value.omittedActivityCount) : \"0\",\n },\n { key: \"Limitations\", value: String(value.limitations.length) },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n projectionLimitationTable(value.limitations),\n { kind: \"divider\", title: \"Activities\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Activity ID\" },\n { header: \"Parent\" },\n { header: \"Turn\" },\n { header: \"Phase\" },\n { header: \"Label\" },\n { header: \"Start\" },\n { header: \"Duration\" },\n { header: \"Outcome\" },\n ],\n rows: value.activities.map((activity) => [\n activity.activityId,\n activity.parentActivityId ?? \"none\",\n activity.turnId ?? \"none\",\n activity.phase,\n activity.label,\n `${fmt(activity.startOffsetMs)} ms`,\n `${fmt(activity.durationMs)} ms`,\n activity.outcome,\n ]),\n },\n ],\n },\n ]);\n}\ntype UsageTotals = UsageView[\"totals\"];\nfunction numericUsageTotal(total: UsageTotals[\"inputTokens\"]): string {\n return `${total.value === null ? \"not-recorded\" : fmt(total.value)} (${total.state}; ${total.observationCount} observations)`;\n}\nfunction usageTotalEntries(totals: UsageTotals): readonly {\n readonly key: string;\n readonly value: string;\n}[] {\n return [\n { key: \"Input tokens\", value: numericUsageTotal(totals.inputTokens) },\n { key: \"Output tokens\", value: numericUsageTotal(totals.outputTokens) },\n { key: \"Requests\", value: numericUsageTotal(totals.requests) },\n {\n key: \"Provider costs\",\n value: `${totals.providerCosts.state}; ${totals.providerCosts.observationCount} observations${totals.providerCosts.values.length === 0\n ? \"; no recorded values\"\n : `; ${totals.providerCosts.values.map((cost) => `${cost.value} ${cost.currency} (${cost.observationCount} observations)`).join(\"; \")}`}`,\n },\n ];\n}\nexport function renderUsage(value: UsageView): string {\n return terminal([\n {\n kind: \"panel\",\n title: `Usage ${value.locator}`,\n meta: value.state,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n ...usageTotalEntries(value.totals),\n {\n key: \"Limitations\",\n value: boundedPreview(value.limitations.length, value.limitationsTruncated, value.omittedLimitationCount),\n },\n {\n key: \"Turns\",\n value: boundedPreview(value.turns.length, value.turnsTruncated, value.omittedTurnCount),\n },\n {\n key: \"Omitted observations\",\n value: value.hasMore ? String(value.omittedObservationCount) : \"0\",\n },\n ],\n },\n { kind: \"divider\", title: \"Limitations\" },\n {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: value.limitations.map((limitation) => [\n formatUsageLimitation(limitation),\n ]),\n overflow: \"wrap\",\n },\n { kind: \"divider\", title: \"Provider costs\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Currency\" },\n { header: \"Value\" },\n { header: \"State\" },\n { header: \"Observations\" },\n ],\n rows: value.totals.providerCosts.values.map((cost) => [\n cost.currency,\n cost.value,\n value.totals.providerCosts.state,\n String(cost.observationCount),\n ]),\n },\n { kind: \"divider\", title: \"Turn coverage\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Turn\" },\n { header: \"Coverage\" },\n { header: \"Reason\" },\n ],\n rows: value.turns.map((turn) => [\n turn.turnId,\n turn.coverage.state,\n turn.coverage.state === \"complete\" ? \"none\" : turn.coverage.reason,\n ]),\n },\n { kind: \"divider\", title: \"Observation provenance\" },\n {\n kind: \"table\",\n columns: [\n { header: \"Turn\" },\n { header: \"Observation ID\" },\n { header: \"Kind\" },\n { header: \"Provider\" },\n { header: \"Recorded value\" },\n ],\n rows: value.observations.map((observation) => [\n observation.turnId,\n observation.usageObservationId,\n observation.kind,\n observation.provider,\n usageObservationValue(observation),\n ]),\n overflow: \"wrap\",\n },\n ],\n },\n ]);\n}\nfunction usageObservationValue(value: UsageView[\"observations\"][number]): string {\n switch (value.kind) {\n case \"token-bucket\":\n return `${value.bucket}; ${value.tokens} tokens`;\n case \"request\":\n return value.requestKind;\n case \"provider-cost\":\n return `${value.amount} ${value.currency}`;\n }\n}\nexport function renderDiff(value: DiffView): string {\n const statusBlocks: TerminalPanelContentBlock[] = [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"State\", value: value.state },\n { key: \"Windows\", value: String(value.windows.length) },\n ],\n },\n ];\n if (value.state === \"invalid\") {\n statusBlocks.push({ kind: \"divider\", title: \"Issues\" }, {\n kind: \"table\",\n columns: [{ header: \"Issue\" }],\n rows: value.issues.map((issue) => [issue]),\n overflow: \"wrap\",\n });\n }\n if (value.state === \"complete\" || value.state === \"partial\") {\n statusBlocks.push({ kind: \"divider\", title: \"Limitations\" }, {\n kind: \"table\",\n columns: [{ header: \"Limitation\" }],\n rows: value.limitations.map((limitation) => [\n formatDiffLimitation(limitation),\n ]),\n overflow: \"wrap\",\n });\n }\n const blocks: TerminalBlock[] = [\n {\n kind: \"panel\",\n title: `Diff ${value.locator}`,\n meta: value.state,\n blocks: statusBlocks,\n },\n ];\n for (const window of value.windows) {\n blocks.push({\n kind: \"panel\",\n title: `Window ${window.windowId}`,\n meta: `sequence ${window.sequence}`,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [{ key: \"Changes\", value: String(window.changes.length) }],\n },\n ],\n });\n for (const change of window.changes) {\n blocks.push({\n kind: \"panel\",\n title: `Change ${change.changeId}`,\n meta: change.kind,\n blocks: [\n {\n kind: \"keyValue\",\n entries: [\n { key: \"Path\", value: change.path },\n { key: \"Before\", value: fileEndpoint(change.before) },\n { key: \"After\", value: fileEndpoint(change.after) },\n ],\n },\n ],\n });\n }\n }\n return terminal(blocks);\n}\ntype DiffLimitation = Extract<DiffView, {\n readonly state: \"complete\" | \"partial\";\n}>[\"limitations\"][number];\nfunction formatDiffLimitation(value: DiffLimitation): string {\n switch (value.code) {\n case \"capture-failed\":\n case \"capture-interrupted\":\n return `${value.code}; stage ${value.stage}; window ${value.atWindowId ?? \"not-recorded\"}`;\n case \"collection-cap-reached\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}; window ${value.atWindowId ?? \"not-recorded\"}`;\n case \"unsupported-input\":\n return `${value.code}; target ${value.target}; omitted at least ${value.omittedAtLeast}`;\n }\n}\ntype DiffEndpoint = Extract<DiffView[\"windows\"][number][\"changes\"][number][\"before\"], {\n readonly state: \"absent\" | \"present\";\n}>;\nfunction fileEndpoint(value: DiffEndpoint): string {\n if (value.state === \"absent\")\n return \"absent\";\n const revision = value.revision;\n if (revision.kind === \"text\") {\n return `text; ${revision.content}; ${revision.byteLength} bytes; ${revision.sha256}`;\n }\n if (revision.kind === \"elided\") {\n return `elided; ${revision.reason}; ${revision.byteLength} bytes`;\n }\n return `unavailable; ${revision.reason}`;\n}\nexport function traceSelector(value: TraceView, id: string) {\n if (value.identities.itemIds.includes(id)) {\n return { kind: \"item\" as const, itemId: id };\n }\n if (value.identities.toolOccurrenceIds.includes(id)) {\n return { kind: \"tool-occurrence\" as const, toolOccurrenceId: id };\n }\n if (value.identities.commandIds.includes(id)) {\n return { kind: \"command\" as const, commandId: id };\n }\n return undefined;\n}\n"]}
|
|
@@ -16,11 +16,11 @@ niceeval query run [--record <file>] --request <file|->
|
|
|
16
16
|
|
|
17
17
|
`query` 是 versioned `niceeval.query/v1` JSON operation protocol。成功和协议级领域失败都会向 stdout 写入恰好一个 canonical document。命令用法错误和无法形成 document 的进程失败只写 stderr。
|
|
18
18
|
|
|
19
|
-
- `discover`
|
|
19
|
+
- `discover` 返回静态、紧凑的 operation ID catalog。它不接受 `--record`,也不读取 Record;它不会返回 request schema。
|
|
20
20
|
- `explain` 验证完整 request,说明将运行的 operation 与合法的后续请求。
|
|
21
21
|
- `run` 执行 request,并返回该 operation 的闭合结果。
|
|
22
22
|
|
|
23
|
-
先调用 `discover
|
|
23
|
+
先调用 `discover` 确认当前版本有哪些 operation,再按本页或[查看结果](/zh/tutorials/viewing-results)中的最小 request 构造请求,并用 `explain` 校验。不要猜字段,也不要用 SQL、JSON path 或公式拼出另一种查询语言。
|
|
24
24
|
|
|
25
25
|
continuation token 绑定 operation、canonical request、source identity 和 `PublicationCutoff`。任一绑定变化都会得到 restart correction。
|
|
26
26
|
|
|
@@ -40,6 +40,8 @@ niceeval show @<locator> --diff [--record <file>]
|
|
|
40
40
|
|
|
41
41
|
`show` 是固定的终端排版入口。省略 selector 时显示默认 overview。`--run <run-id>` 显示一个精确 Run,可重复传入。`--experiment <experiment-id>` 显示一个精确 Experiment,也可重复传入。
|
|
42
42
|
|
|
43
|
+
通过制显示 `Verdicts` 与 `Pass rate`;纯计分制显示 `Outcomes` 与 `Score`,完成评分的 Attempt 标作 `scored`,不会把内部完成状态误写成 `passed` 或通过率。混合范围只在适用的行显示通过率。
|
|
44
|
+
|
|
43
45
|
`@<locator>` 选择一个 Attempt。它不能与 `--run` 或 `--experiment` 一起使用,后两者也不能一起使用。一个命令最多只能给出一个 Attempt locator。
|
|
44
46
|
|
|
45
47
|
在 Attempt 上,`--source` 显示已捕获的 source facts 和 Assertion sites。`--execution` 显示有界 execution outline,`--timing` 显示 timing activities。
|
|
@@ -23,6 +23,25 @@ niceeval show @<attempt-locator> --diff
|
|
|
23
23
|
|
|
24
24
|
`--source` 查看已封存的源码和 Assertion 事实;`--execution` 查看有界的执行 outline;`--timing` 查看活动、阶段和耗时;`--usage` 查看已封口的 token、request 和 cost totals;`--diff` 查看已封存的文件变更窗口。要展开 execution outline 中的一项,使用它显示的稳定 ID:`niceeval show @<attempt-locator> --execution --expand <stable-id>`。
|
|
25
25
|
|
|
26
|
+
这条链负责从 Run 定位到一次执行:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
show --run
|
|
30
|
+
→ show @locator
|
|
31
|
+
→ source / execution / timing / usage / diff
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
如果问题落在一条具体 Assertion,继续使用 `query` 的动态发现链。`show` 负责给人看紧凑概览,`query` 负责返回 contribution、measurement 和 Judge rationale 等结构化详情:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
query discover
|
|
38
|
+
→ attempt.get(locator)
|
|
39
|
+
→ 从 assertions.entries 选择 entryId
|
|
40
|
+
→ attempt.assertion.detail(locator, entryId)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
不要从 `show` 的排版文本反推 Assertion 字段。完整 request 示例见[查看运行结果](/zh/tutorials/viewing-results#从-show-进入-assertion-详情)。
|
|
44
|
+
|
|
26
45
|
## 无法打开结果
|
|
27
46
|
|
|
28
47
|
| 错误 | 下一步 |
|
|
@@ -36,7 +55,7 @@ niceeval show @<attempt-locator> --diff
|
|
|
36
55
|
|
|
37
56
|
## 结果不完整或无法比较
|
|
38
57
|
|
|
39
|
-
脚本、AI 或 CI 先运行 `niceeval query discover` 找到正确的固定 operation,再用 `explain` 检查 request,最后运行 `run`。结果会指出 missing、issues、Evidence 与 correction。`query`
|
|
58
|
+
脚本、AI 或 CI 先运行 `niceeval query discover` 找到正确的固定 operation,再用 `explain` 检查 request,最后运行 `run`。结果会指出 missing、issues、Evidence 与 correction。`query` 只输出机器协议,不用来阅读终端排版;需要逐项解释分数时,使用 `attempt.get` 和 `attempt.assertion.detail`,不要只看聚合 Score。
|
|
40
59
|
|
|
41
60
|
需要浏览器界面时运行 `niceeval view --run <run-id> --no-open`。不要解析 View 页面,也不要读取或查询私有 SQLite 表。
|
|
42
61
|
|
|
@@ -56,6 +56,8 @@ Sandbox Coding 任务常用一份隐藏测试判分:Agent 改完代码后,
|
|
|
56
56
|
});
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
对 Terminal-Bench 一类仓库任务,构建给 Agent 的初始环境时只放公开 fixture,不把隐藏测试或 runner 放进镜像、工作目录或 prompt。等 `t.send(...)` 返回后,再由评估侧把模块顶层 `loadText` 得到的原始隐藏文件上传进 Sandbox,执行原始 runner,并同时检查预期结果和防泄漏探针。这样 hidden 文件既参与 fingerprint,又不会提前暴露给被测 Agent。
|
|
60
|
+
|
|
59
61
|
改一下 `datepicker_test.test.tsx` 再跑同一条命令,只有这条评估用例重跑,验证生效。
|
|
60
62
|
|
|
61
63
|
## 注意
|
|
@@ -77,7 +77,7 @@ export default defineScoreEval({
|
|
|
77
77
|
| `defineEval` | `passed` | `failed` | `errored` | `errored` |
|
|
78
78
|
| `defineScoreEval` | `scored`,可排名的 score | 正常不失效;score 照常累计 | 已配置 score 或 control 的项不可用时不可排名 | `errored`,只保留 `partialScore` |
|
|
79
79
|
|
|
80
|
-
计分制的 `scored` 可以是 0
|
|
80
|
+
计分制的 `scored` 可以是 0 分。零分说明评估成功形成了分数,不等于执行失败或证据不足。每条 Attempt 仍记录终态 Verdict,但报告以 `scored` 或 `errored` 作为 Score Eval 的主结果,不把该 Verdict 换算成通过率。
|
|
81
81
|
|
|
82
82
|
## Judge 也是 measurement
|
|
83
83
|
|
|
@@ -51,7 +51,7 @@ checkout cart/add-item ordinal 1 execute: input-identity-changed
|
|
|
51
51
|
# 默认采用符合条件的 passed 与 failed Attempt
|
|
52
52
|
npx niceeval exp checkout
|
|
53
53
|
|
|
54
|
-
#
|
|
54
|
+
# 单独写 --rerun 等价于 --rerun failed;已经 passed/scored 的 slot 仍会采用
|
|
55
55
|
npx niceeval exp checkout --rerun
|
|
56
56
|
|
|
57
57
|
# 重新执行选中范围内的全部 slot
|
|
@@ -60,6 +60,8 @@ npx niceeval exp checkout --rerun all
|
|
|
60
60
|
|
|
61
61
|
改变 `--rerun` 只影响本次 Invocation,不会修改已有 Run 或 Attempt。
|
|
62
62
|
|
|
63
|
+
不要在 `exp` 仍运行时并发执行 `show --experiment`:Experiment 可能尚未产生任何已发布结果。等待命令完成,从 receipt 复制本次 `runIds`,再用 `niceeval show --run <run-id>` 审阅确定的 Run。若目的是重做所有已通过或已评分的 slot,必须明确写 `--rerun all`;不带值的 `--rerun` 不会做到这一点。
|
|
64
|
+
|
|
63
65
|
## 明确接受已有 Attempt
|
|
64
66
|
|
|
65
67
|
身份变化不一定表示历史结果已经失效,但 NiceEval 不会替操作者猜测。先从 dry run 或结果页取得完整 locator,核对候选 Attempt;确认它在新配置下仍然成立时,明确接受它:
|
|
@@ -12,7 +12,7 @@ description: "在终端用 show 逐层查看结果;在浏览器用 View 审阅
|
|
|
12
12
|
niceeval show
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
不带 selector 时,`show` 输出当前 PublicationCutoff 的 Overview。它按 Experiment、评估用例和 Attempt
|
|
15
|
+
不带 selector 时,`show` 输出当前 PublicationCutoff 的 Overview。它按 Experiment、评估用例和 Attempt 展开汇总,并保留适用的通过率或分数、coverage、缺失项和 issues。纯计分制显示 `Outcomes`、`scored` 与 `Score`,不显示 `passed` 或通过率。先从这里找出需要继续查看的 Experiment、Run 或 Attempt locator。
|
|
16
16
|
|
|
17
17
|
Overview 来自项目唯一的 `.niceeval/record.sqlite` 中已发布的结果。即使当前源码或当前安装候选的 identity 已经改变,
|
|
18
18
|
`show` 也会保留每个逻辑 slot 的最新结果,不会把存在的历史显示为 `Observed 0/0`。这表示结果可查看,
|
|
@@ -51,6 +51,45 @@ niceeval show @<locator> --execution --expand <stable-id>
|
|
|
51
51
|
|
|
52
52
|
`--timing` 显示活动的顺序和耗时,`--usage` 显示 token、请求和成本总计,`--diff` 显示已捕获的文件变更窗口。详情只读取 Record 已发布的事实;`partial`、`not-recorded` 或 `unavailable` 表示实际可用范围,不能当作零值或失败。
|
|
53
53
|
|
|
54
|
+
默认 Overview 会隐藏没有问题的 Attempt,让错误和下一条下钻命令留在一屏内。看到 `Attempts hidden` 时,使用输出建议的 `show --experiment <experiment-id>` 缩小范围;需要显示该范围的全部 Attempt 时再加 `--all`。隐藏只影响终端排版,不表示 Record 缺少结果。
|
|
55
|
+
|
|
56
|
+
## 从 Show 进入 Assertion 详情
|
|
57
|
+
|
|
58
|
+
`show @<locator>` 适合先找出 Assertion 名称和 Entry ID,但不展开每项 contribution、measurement 或 Judge rationale。需要解释具体得分或失败原因时,转到结构化 `query`,不要解析 `show` 的终端文本。
|
|
59
|
+
|
|
60
|
+
先动态发现当前版本支持的 operation ID,再取得该 Attempt 的 Assertion 清单。`discover` 是紧凑目录,不包含 request schema;下面的请求就是 `attempt.get` 的最小形式,可先交给 `query explain` 校验:
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
niceeval query discover
|
|
64
|
+
|
|
65
|
+
niceeval query run --request - <<'JSON'
|
|
66
|
+
{
|
|
67
|
+
"protocol": "niceeval.query/v1",
|
|
68
|
+
"operation": {
|
|
69
|
+
"kind": "attempt.get",
|
|
70
|
+
"locator": "@<locator>"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
JSON
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
从返回的 `assertions.entries` 选择一个 `entryId`,再读取这一项:
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
niceeval query run --request - <<'JSON'
|
|
80
|
+
{
|
|
81
|
+
"protocol": "niceeval.query/v1",
|
|
82
|
+
"operation": {
|
|
83
|
+
"kind": "attempt.assertion.detail",
|
|
84
|
+
"locator": "@<locator>",
|
|
85
|
+
"entryId": "<entry-id>"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
JSON
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
详情中的 contribution 说明这一项获得多少分,evaluation 保存实际测量结果,explanation retention 则说明 Judge rationale 等解释材料是否可用。字段不存在或状态为 `unavailable` 时,按返回的 reason 解释,不能从其它字段猜值。
|
|
92
|
+
|
|
54
93
|
## 正确解释完成、判定与分数
|
|
55
94
|
|
|
56
95
|
先确认 Attempt 是否形成业务结果,再解释它的质量:
|
|
@@ -58,9 +97,9 @@ niceeval show @<locator> --execution --expand <stable-id>
|
|
|
58
97
|
- `errored`:执行链中断,没有形成可评分的业务结论。
|
|
59
98
|
- `failed`:执行完成,但通过制评估的业务断言没有满足。
|
|
60
99
|
- `passed`:通过制评估满足了判定条件。仍需检查 warning、coverage 和证据限制。
|
|
61
|
-
- Score Eval:评分过程完成后读取 `Score` 和逐项
|
|
100
|
+
- Score Eval:评分过程完成后读取 `Score` 和逐项 contribution。计分制没有 Attempt Verdict,不得用 `passed` 或通过率解释质量;执行中断时只报告 `errored` 和可用的 partial score。
|
|
62
101
|
|
|
63
|
-
|
|
102
|
+
比较结果时使用同一种评估、相同分母和相同证据覆盖。不要把 `unavailable` 当作零分。需要解释一项得失时,固定同一个 Attempt locator,交叉查看 overview、`--execution`、`--source` 与 `attempt.assertion.detail`。
|
|
64
103
|
|
|
65
104
|
## 在浏览器中审阅
|
|
66
105
|
|
|
@@ -83,7 +122,7 @@ niceeval query explain --request request.json
|
|
|
83
122
|
niceeval query run --request request.json
|
|
84
123
|
```
|
|
85
124
|
|
|
86
|
-
`query` 是给 AI、脚本和 CI 使用的机器入口,只输出 `niceeval.query/v1` 的结构化 JSON,不提供适合人阅读的终端排版。先从 `discover`
|
|
125
|
+
`query` 是给 AI、脚本和 CI 使用的机器入口,只输出 `niceeval.query/v1` 的结构化 JSON,不提供适合人阅读的终端排版。先从 `discover` 返回的紧凑 catalog 确认 operation ID,再按文档中的最小请求构造 request,并用 `explain` 校验。`run` 向 stdout 写一个 `niceeval.query/v1` document。不要解析 View 页面,也不要使用未公开的 Record 文件。
|
|
87
126
|
|
|
88
127
|
常见读取任务由固定 operation 覆盖:列出 Run、取得 Run summary、读取 Attempt detail、trace、diff、sources、artifacts 或比较两个 Run。查看 [CLI](/zh/reference/cli) 获取完整说明。
|
|
89
128
|
|