114 lines · 3.7 KB · TypeScript
RawDownload
import { MessageId, RunId, type OrchestrationV2RunStatus } from "@t3tools/contracts";import * as DateTime from "effect/DateTime";import { describe, expect, it } from "vite-plus/test"; import { v2Projection } from "./orchestrationV2TestFixtures.ts";import {  deriveLatestThreadRun,  deriveThreadActivityRun,  deriveThreadRuntime,  threadRuntimeHasInterruptibleRun,} from "./threadExecution.ts"; const now = DateTime.makeUnsafe("2026-07-28T10:00:00.000Z"); function run(id: string, ordinal: number, status: OrchestrationV2RunStatus) {  return {    id: RunId.make(id),    threadId: v2Projection.thread.id,    ordinal,    providerInstanceId: v2Projection.thread.providerInstanceId,    modelSelection: v2Projection.thread.modelSelection,    providerThreadId: null,    userMessageId: MessageId.make(`message-${id}`),    rootNodeId: null,    activeAttemptId: null,    status,    requestedAt: now,    startedAt: status === "queued" ? null : now,    completedAt: null,    checkpointId: null,    contextHandoffId: null,  };} describe("thread execution presentation", () => {  it("keeps live activity attached to an executing run when a newer run is queued", () => {    const runningRun = run("run-running", 1, "running");    const queuedRun = run("run-queued", 2, "queued");    const projection = { ...v2Projection, runs: [queuedRun, runningRun], updatedAt: now };     expect(deriveLatestThreadRun(projection)?.runId).toBe(queuedRun.id);    expect(deriveThreadActivityRun(projection)).toMatchObject({      runId: runningRun.id,      status: "running",    });     const runtime = deriveThreadRuntime(projection);    expect(runtime).toMatchObject({      status: "running",      activeRunId: runningRun.id,    });    expect(threadRuntimeHasInterruptibleRun(runtime)).toBe(true);  });   it("does not expose a queued-only run as interruptible", () => {    const queuedRun = run("run-queued", 1, "queued");    const projection = { ...v2Projection, runs: [queuedRun], updatedAt: now };     expect(deriveThreadActivityRun(projection)).toMatchObject({      runId: queuedRun.id,      status: "queued",    });     const runtime = deriveThreadRuntime(projection);    expect(runtime).toMatchObject({      status: "queued",      activeRunId: null,    });    expect(threadRuntimeHasInterruptibleRun(runtime)).toBe(false);  });   it("keeps checkpoint-wait activity visible without exposing a non-functional interrupt", () => {    const waitingRun = run("run-waiting", 1, "waiting");    const projection = { ...v2Projection, runs: [waitingRun], updatedAt: now };     expect(deriveThreadActivityRun(projection)).toMatchObject({      runId: waitingRun.id,      status: "waiting",    });     const runtime = deriveThreadRuntime(projection);    expect(runtime).toMatchObject({      status: "waiting",      activeRunId: null,    });    expect(threadRuntimeHasInterruptibleRun(runtime)).toBe(false);  });   it("does not expose a stale active run after the runtime parks at idle", () => {    const runtime = {      status: "idle" as const,      activeRunId: RunId.make("run-stale"),      providerInstanceId: v2Projection.thread.providerInstanceId,      providerName: null,      lastError: null,      updatedAt: DateTime.formatIso(now),    };     expect(threadRuntimeHasInterruptibleRun(runtime)).toBe(false);  });   it.each(["preparing", "starting"] as const)("keeps an active %s run interruptible", (status) => {    const runtime = {      status,      activeRunId: RunId.make(`run-${status}`),      providerInstanceId: v2Projection.thread.providerInstanceId,      providerName: null,      lastError: null,      updatedAt: DateTime.formatIso(now),    };     expect(threadRuntimeHasInterruptibleRun(runtime)).toBe(true);  });});