116 lines · 3.5 KB · TypeScript
RawDownload
/** * ProjectionSnapshotQuery - Read-model snapshot query service interface. * * Exposes the current orchestration projection snapshot for read-only API * access. * * @module ProjectionSnapshotQuery */import type {  OrchestrationCheckpointSummary,  OrchestrationProject,  OrchestrationProjectShell,  OrchestrationReadModel,  OrchestrationShellSnapshot,  OrchestrationThread,  OrchestrationThreadShell,  ProjectId,  ThreadId,} from "@t3tools/contracts";import { Context } from "effect";import type { Option } from "effect";import type { Effect } from "effect"; import type { ProjectionRepositoryError } from "../../persistence/Errors.ts"; export interface ProjectionSnapshotCounts {  readonly projectCount: number;  readonly threadCount: number;} export interface ProjectionThreadCheckpointContext {  readonly threadId: ThreadId;  readonly projectId: ProjectId;  readonly workspaceRoot: string;  readonly worktreePath: string | null;  readonly checkpoints: ReadonlyArray<OrchestrationCheckpointSummary>;} /** * ProjectionSnapshotQueryShape - Service API for read-model snapshots. */export interface ProjectionSnapshotQueryShape {  /**   * Read the latest orchestration projection snapshot.   *   * Rehydrates from projection tables and derives snapshot sequence from   * projector cursor state.   */  readonly getSnapshot: () => Effect.Effect<OrchestrationReadModel, ProjectionRepositoryError>;   /**   * Read the latest orchestration shell snapshot.   *   * Returns only projects and thread shell summaries so clients can bootstrap   * lightweight navigation state without hydrating every thread body.   */  readonly getShellSnapshot: () => Effect.Effect<    OrchestrationShellSnapshot,    ProjectionRepositoryError  >;   /**   * Read aggregate projection counts without hydrating the full read model.   */  readonly getCounts: () => Effect.Effect<ProjectionSnapshotCounts, ProjectionRepositoryError>;   /**   * Read the active project for an exact workspace root match.   */  readonly getActiveProjectByWorkspaceRoot: (    workspaceRoot: string,  ) => Effect.Effect<Option.Option<OrchestrationProject>, ProjectionRepositoryError>;   /**   * Read a single active project shell row by id.   */  readonly getProjectShellById: (    projectId: ProjectId,  ) => Effect.Effect<Option.Option<OrchestrationProjectShell>, ProjectionRepositoryError>;   /**   * Read the earliest active thread for a project.   */  readonly getFirstActiveThreadIdByProjectId: (    projectId: ProjectId,  ) => Effect.Effect<Option.Option<ThreadId>, ProjectionRepositoryError>;   /**   * Read the checkpoint context needed to resolve a single thread diff.   */  readonly getThreadCheckpointContext: (    threadId: ThreadId,  ) => Effect.Effect<Option.Option<ProjectionThreadCheckpointContext>, ProjectionRepositoryError>;   /**   * Read a single active thread shell row by id.   */  readonly getThreadShellById: (    threadId: ThreadId,  ) => Effect.Effect<Option.Option<OrchestrationThreadShell>, ProjectionRepositoryError>;   /**   * Read a single active thread detail snapshot by id.   */  readonly getThreadDetailById: (    threadId: ThreadId,  ) => Effect.Effect<Option.Option<OrchestrationThread>, ProjectionRepositoryError>;} /** * ProjectionSnapshotQuery - Service tag for projection snapshot queries. */export class ProjectionSnapshotQuery extends Context.Service<  ProjectionSnapshotQuery,  ProjectionSnapshotQueryShape>()("t3/orchestration/Services/ProjectionSnapshotQuery") {}