style(lens): format live run files

This commit is contained in:
Ishaan Jaff 2026-10-03 18:19:40 -07:00
parent 8b9e799a19
commit 68ca72041e
No known key found for this signature in database
7 changed files with 66 additions and 19 deletions

View file

@ -40,7 +40,13 @@ export const fixtureReviews: readonly Review[] = [
reasoning:
"The user asked about a return 12 days after purchase. get_policy returned a 30-day window and the reply matches it, so the answer is grounded.",
spans: [
{ span_id: "s1", kind: "user", name: "input", preview: "Can I return my headphones? Bought 12 days ago.", cited: false },
{
span_id: "s1",
kind: "user",
name: "input",
preview: "Can I return my headphones? Bought 12 days ago.",
cited: false,
},
{ span_id: "s2", kind: "tool", name: "get_policy", preview: "Returns accepted within 30 days.", cited: false },
],
verdicts: [],
@ -74,7 +80,13 @@ export const fixtureReviews: readonly Review[] = [
reasoning: "issue_refund timed out, but the agent told the user the refund was processed.",
spans: [
{ span_id: "s1", kind: "user", name: "input", preview: "Please refund invoice 8812", cited: false },
{ span_id: "s2", kind: "tool", name: "issue_refund", preview: "TimeoutError: upstream did not respond", cited: true },
{
span_id: "s2",
kind: "tool",
name: "issue_refund",
preview: "TimeoutError: upstream did not respond",
cited: true,
},
],
verdicts: [{ check_id: "invented", kind: "issue", summary: "Claimed a refund succeeded after a timeout" }],
},

View file

@ -356,7 +356,10 @@ function demoLensApi(data: LensDemoData): LensApi {
run: (lensId, jobId) => found(jobs(lensId)?.find((job) => job.id === jobId)),
reviews: async (lensId, jobId, after) => {
const job = await found(jobs(lensId)?.find((item) => item.id === jobId));
return { reviews: job.reviews.slice(Math.max(0, after - (job.reviewed - job.reviews.length))), reviewed: job.reviewed };
return {
reviews: job.reviews.slice(Math.max(0, after - (job.reviewed - job.reviews.length))),
reviewed: job.reviewed,
};
},
execution: notInDemo,
sample: notInDemo,

View file

@ -3,14 +3,7 @@
import { useState } from "react";
import { modelsUsed } from "../../model/inbox";
import {
analysisModel,
doneLine,
inFlight,
issueCount,
nowLine,
stripState,
} from "../../model/live";
import { analysisModel, doneLine, inFlight, issueCount, nowLine, stripState } from "../../model/live";
import { queueReasonText } from "../../model/status";
import type { Job, Review } from "../../model/types";
import { QueueReasonText, WorkerTasks } from "../QueueReasonText";
@ -85,7 +78,9 @@ export function LiveRun({
done={job.status === "completed" ? doneLine(job) : null}
slots={Math.max(1, Math.min(job.settings.concurrency, MAX_LANES))}
checks={job.settings.checks}
scope={job.reviewed > reviews.length ? `From the latest ${reviews.length} of ${job.reviewed} reviewed traces` : ""}
scope={
job.reviewed > reviews.length ? `From the latest ${reviews.length} of ${job.reviewed} reviewed traces` : ""
}
waiting={waiting}
/>
</>

View file

@ -11,7 +11,15 @@ import { useNow } from "@/hooks/useNow";
import { cn } from "@/lib/cva.config";
import { money } from "../../model/format";
import { newestFirst, outcome, providerOf, reviewKey, shortVerdict, type IssueCount, type StripState } from "../../model/live";
import {
newestFirst,
outcome,
providerOf,
reviewKey,
shortVerdict,
type IssueCount,
type StripState,
} from "../../model/live";
import type { Review } from "../../model/types";
const RECENT = 3;

View file

@ -11,18 +11,28 @@ import type { Review } from "../../model/types";
const LIMIT = 200;
const RED = "text-[#e5484d]";
const ROW = "grid h-9 w-full grid-cols-[0.75rem_minmax(0,8rem)_minmax(0,1fr)_auto] items-center gap-2 px-2 text-left text-[12px]";
const ROW =
"grid h-9 w-full grid-cols-[0.75rem_minmax(0,8rem)_minmax(0,1fr)_auto] items-center gap-2 px-2 text-left text-[12px]";
function Expanded({ review }: { review: Review }) {
const verdicts = review.verdicts.length
? review.verdicts
: [{ check_id: "", kind: "pattern" as const, summary: review.cannot_assess ? "Not enough evidence to judge" : "No issue observed" }];
: [
{
check_id: "",
kind: "pattern" as const,
summary: review.cannot_assess ? "Not enough evidence to judge" : "No issue observed",
},
];
return (
<div className="flex flex-col gap-1.5 px-7 pt-0.5 pb-2.5 text-[12px] leading-relaxed">
{review.reasoning && <p className="text-muted-foreground">{briefReasoning(review.reasoning)}</p>}
<ul className="flex flex-col gap-1">
{verdicts.map((verdict, index) => (
<li key={`${verdict.check_id}-${index}`} className={cn("flex gap-2", verdict.kind === "issue" ? RED : "text-foreground")}>
<li
key={`${verdict.check_id}-${index}`}
className={cn("flex gap-2", verdict.kind === "issue" ? RED : "text-foreground")}
>
<span
aria-hidden="true"
className={cn(
@ -38,7 +48,17 @@ function Expanded({ review }: { review: Review }) {
);
}
function DoneRow({ review, now, open, onToggle }: { review: Review; now: number; open: boolean; onToggle: () => void }) {
function DoneRow({
review,
now,
open,
onToggle,
}: {
review: Review;
now: number;
open: boolean;
onToggle: () => void;
}) {
const result = outcome(review);
return (
<>

View file

@ -136,7 +136,11 @@ describe("Why a run is queued", () => {
const free = { ...worker, id: "w2" };
const elsewhere = [running("swarm", "w2", 200)];
expect(queueReason({ ...queued, worker_id: "w1" }, elsewhere, [worker, free], now).kind).toBe("starting");
const self = { id: "mine", settings: job.settings, jobs: [{ ...queued, status: "running" as const, worker_id: "w1" }] };
const self = {
id: "mine",
settings: job.settings,
jobs: [{ ...queued, status: "running" as const, worker_id: "w1" }],
};
expect(queueReason(queued, [self], [worker], now).kind).toBe("starting");
});

View file

@ -24,7 +24,12 @@ export type QueueReason =
type QueuedJob = Pick<Job, "id" | "worker_id" | "created_at">;
function workerTasks(job: QueuedJob, lenses: readonly Pick<Lens, "id" | "jobs" | "settings">[], workerIds: ReadonlySet<string>, now: number) {
function workerTasks(
job: QueuedJob,
lenses: readonly Pick<Lens, "id" | "jobs" | "settings">[],
workerIds: ReadonlySet<string>,
now: number,
) {
return lenses.flatMap((lens) =>
lens.jobs
.filter((other) => other.status === "running" && other.id !== job.id && workerIds.has(other.worker_id ?? ""))