63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import type { SubagentRunRecord } from "../../agents/subagent-registry.js";
|
|
import {
|
|
formatDurationShort,
|
|
formatRunLabel,
|
|
formatRunStatus,
|
|
resolveSubagentLabel,
|
|
sortSubagentRuns,
|
|
} from "./subagents-utils.js";
|
|
|
|
const baseRun: SubagentRunRecord = {
|
|
runId: "run-1",
|
|
childSessionKey: "agent:main:subagent:abc",
|
|
requesterSessionKey: "agent:main:main",
|
|
requesterDisplayKey: "main",
|
|
task: "do thing",
|
|
cleanup: "keep",
|
|
createdAt: 1000,
|
|
startedAt: 1000,
|
|
};
|
|
|
|
describe("subagents utils", () => {
|
|
it("resolves labels from label, task, or fallback", () => {
|
|
expect(resolveSubagentLabel({ ...baseRun, label: "Label" })).toBe("Label");
|
|
expect(resolveSubagentLabel({ ...baseRun, label: " ", task: "Task" })).toBe("Task");
|
|
expect(resolveSubagentLabel({ ...baseRun, label: " ", task: " " }, "fallback")).toBe(
|
|
"fallback",
|
|
);
|
|
});
|
|
|
|
it("formats run labels with truncation", () => {
|
|
const long = "x".repeat(100);
|
|
const run = { ...baseRun, label: long };
|
|
const formatted = formatRunLabel(run, { maxLength: 10 });
|
|
expect(formatted.startsWith("x".repeat(10))).toBe(true);
|
|
expect(formatted.endsWith("…")).toBe(true);
|
|
});
|
|
|
|
it("sorts subagent runs by newest start/created time", () => {
|
|
const runs: SubagentRunRecord[] = [
|
|
{ ...baseRun, runId: "run-1", createdAt: 1000, startedAt: 1000 },
|
|
{ ...baseRun, runId: "run-2", createdAt: 1200, startedAt: 1200 },
|
|
{ ...baseRun, runId: "run-3", createdAt: 900 },
|
|
];
|
|
const sorted = sortSubagentRuns(runs);
|
|
expect(sorted.map((run) => run.runId)).toEqual(["run-2", "run-1", "run-3"]);
|
|
});
|
|
|
|
it("formats run status from outcome and timestamps", () => {
|
|
expect(formatRunStatus({ ...baseRun })).toBe("running");
|
|
expect(formatRunStatus({ ...baseRun, endedAt: 2000, outcome: { status: "ok" } })).toBe("done");
|
|
expect(formatRunStatus({ ...baseRun, endedAt: 2000, outcome: { status: "timeout" } })).toBe(
|
|
"timeout",
|
|
);
|
|
});
|
|
|
|
it("formats duration short for seconds and minutes", () => {
|
|
expect(formatDurationShort(45_000)).toBe("45s");
|
|
expect(formatDurationShort(65_000)).toBe("1m5s");
|
|
});
|
|
});
|