ae81e4b5ac
CI / check (pull_request) Successful in 1m44s
Implement the 3 read commands for eval framework: - report: read eval-run from CAS, render formatted text (task, overall, config, judges table, thread ID) - diff: side-by-side comparison with ▲/▼ delta indicators and config change markers - list: scan @uwf/eval/*/latest variables, sort by timestamp desc, --task filter, --limit pagination Architecture: pure formatting functions (format.ts) + data access (read.ts) + thin CLI handlers. Types in types.ts. 11 new tests (formatReport, formatDiff, formatList, selectEntries) Refs #72
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import type { EvalRunPayload, EvalStore } from "../storage/index.js";
|
|
import type { EvalListEntry } from "./types.js";
|
|
|
|
/** Variable prefix and suffix for eval run pointers (`@uwf/eval/<task>/latest`). */
|
|
const EVAL_VAR_PREFIX = "@uwf/eval/";
|
|
const EVAL_VAR_SUFFIX = "/latest";
|
|
|
|
/** Read a single eval-run payload from CAS. Returns null when the node is absent. */
|
|
export function readEvalRun(evalStore: EvalStore, hash: string): EvalRunPayload | null {
|
|
const node = evalStore.store.cas.get(hash);
|
|
if (node === null) {
|
|
return null;
|
|
}
|
|
return node.payload as EvalRunPayload;
|
|
}
|
|
|
|
/**
|
|
* Read every indexed eval run by scanning `@uwf/eval/*\/latest` variables and
|
|
* loading the referenced CAS node. Dangling pointers are skipped.
|
|
*/
|
|
export function readEvalEntries(evalStore: EvalStore): EvalListEntry[] {
|
|
const { store, varStore } = evalStore;
|
|
const entries: EvalListEntry[] = [];
|
|
for (const variable of varStore.list()) {
|
|
if (!variable.name.startsWith(EVAL_VAR_PREFIX) || !variable.name.endsWith(EVAL_VAR_SUFFIX)) {
|
|
continue;
|
|
}
|
|
const node = store.cas.get(variable.value);
|
|
if (node === null) {
|
|
continue;
|
|
}
|
|
const payload = node.payload as EvalRunPayload;
|
|
entries.push({
|
|
task: payload.task,
|
|
overall: payload.overall,
|
|
timestamp: payload.timestamp,
|
|
hash: variable.value,
|
|
});
|
|
}
|
|
return entries;
|
|
}
|