72 lines · 2.0 KB · TypeScript
RawDownload
import {  CommandId,  ProjectId,  ProviderInstanceId,  ThreadId,  type OrchestrationReadModel,} from "@t3tools/contracts";import * as NodeServices from "@effect/platform-node/NodeServices";import { expect, it } from "@effect/vitest";import * as Effect from "effect/Effect"; import { decideOrchestrationCommand } from "./decider.ts"; const UPDATED_AT = "2026-01-01T00:00:00.000Z"; const readModel: OrchestrationReadModel = {  snapshotSequence: 0,  projects: [],  threads: [    {      id: ThreadId.make("thread-1"),      projectId: ProjectId.make("project-1"),      title: "Manual title",      modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },      runtimeMode: "full-access",      interactionMode: "default",      branch: null,      worktreePath: null,      latestTurn: null,      createdAt: UPDATED_AT,      updatedAt: UPDATED_AT,      archivedAt: null,      settledOverride: null,      settledAt: null,      snoozedUntil: null,      snoozedAt: null,      deletedAt: null,      messages: [],      proposedPlans: [],      activities: [],      checkpoints: [],      session: null,    },  ],  updatedAt: UPDATED_AT,}; it.layer(NodeServices.layer)("title regeneration decider", (it) => {  it.effect("preserves updatedAt for a stale completion", () =>    Effect.gen(function* () {      const result = yield* decideOrchestrationCommand({        command: {          type: "thread.title.regeneration.complete",          commandId: CommandId.make("cmd-regeneration-complete"),          threadId: ThreadId.make("thread-1"),          requestId: CommandId.make("cmd-old-regeneration-request"),          title: "Generated title",        },        readModel,      });      const event = Array.isArray(result) ? result[0] : result;       expect(event.type).toBe("thread.meta-updated");      if (event.type === "thread.meta-updated") {        expect(event.payload).toEqual({          threadId: ThreadId.make("thread-1"),          updatedAt: UPDATED_AT,        });      }    }),  );});