95 lines · 2.9 KB · TypeScript
RawDownload
/** * ProjectionCheckpointRepository - Projection repository interface for checkpoints. * * Owns persistence operations for projected checkpoint summaries in thread * timelines. * * @module ProjectionCheckpointRepository */import {  CheckpointRef,  IsoDateTime,  MessageId,  NonNegativeInt,  OrchestrationCheckpointFile,  OrchestrationCheckpointStatus,  ThreadId,  TurnId,} from "@t3tools/contracts";import * as Option from "effect/Option";import * as Context from "effect/Context";import * as Schema from "effect/Schema";import type * as Effect from "effect/Effect"; import type { ProjectionRepositoryError } from "../Errors.ts"; export const ProjectionCheckpoint = Schema.Struct({  threadId: ThreadId,  turnId: TurnId,  checkpointTurnCount: NonNegativeInt,  checkpointRef: CheckpointRef,  status: OrchestrationCheckpointStatus,  files: Schema.Array(OrchestrationCheckpointFile),  assistantMessageId: Schema.NullOr(MessageId),  completedAt: IsoDateTime,});export type ProjectionCheckpoint = typeof ProjectionCheckpoint.Type; export const ListByThreadIdInput = Schema.Struct({  threadId: ThreadId,});export type ListByThreadIdInput = typeof ListByThreadIdInput.Type; export const GetByThreadAndTurnCountInput = Schema.Struct({  threadId: ThreadId,  checkpointTurnCount: NonNegativeInt,});export type GetByThreadAndTurnCountInput = typeof GetByThreadAndTurnCountInput.Type; export const DeleteByThreadIdInput = Schema.Struct({  threadId: ThreadId,});export type DeleteByThreadIdInput = typeof DeleteByThreadIdInput.Type; /** * ProjectionCheckpointRepositoryShape - Service API for projected checkpoints. */export interface ProjectionCheckpointRepositoryShape {  /**   * Insert or replace a projected checkpoint row.   *   * Upserts by composite key `(threadId, checkpointTurnCount)`.   */  readonly upsert: (row: ProjectionCheckpoint) => Effect.Effect<void, ProjectionRepositoryError>;   /**   * List projected checkpoints for a thread.   *   * Returned in ascending checkpoint turn-count order.   */  readonly listByThreadId: (    input: ListByThreadIdInput,  ) => Effect.Effect<ReadonlyArray<ProjectionCheckpoint>, ProjectionRepositoryError>;   /**   * Read a projected checkpoint by thread and turn-count key.   */  readonly getByThreadAndTurnCount: (    input: GetByThreadAndTurnCountInput,  ) => Effect.Effect<Option.Option<ProjectionCheckpoint>, ProjectionRepositoryError>;   /**   * Delete projected checkpoint rows by thread.   */  readonly deleteByThreadId: (    input: DeleteByThreadIdInput,  ) => Effect.Effect<void, ProjectionRepositoryError>;} /** * ProjectionCheckpointRepository - Service tag for checkpoint projection persistence. */export class ProjectionCheckpointRepository extends Context.Service<  ProjectionCheckpointRepository,  ProjectionCheckpointRepositoryShape>()("t3/persistence/Services/ProjectionCheckpoints/ProjectionCheckpointRepository") {}