/** * 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") {}
/**
* 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") {}