2127 lines · 78.1 KB · TypeScript
RawDownload
import {  ChatAttachment,  CheckpointRef,  IsoDateTime,  MessageId,  NonNegativeInt,  OrchestrationCheckpointFile,  OrchestrationProposedPlanId,  OrchestrationReadModel,  OrchestrationShellSnapshot,  OrchestrationThread,  OrchestrationThreadDetailSnapshot,  ProjectScript,  TurnId,  type OrchestrationCheckpointSummary,  type OrchestrationLatestTurn,  type OrchestrationMessage,  type OrchestrationProjectShell,  type OrchestrationProposedPlan,  type OrchestrationProject,  type OrchestrationSession,  type OrchestrationThreadActivity,  type OrchestrationThreadShell,  ModelSelection,  ProjectId,  ThreadId,} from "@t3tools/contracts";import * as Arr from "effect/Array";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import * as Option from "effect/Option";import * as Result from "effect/Result";import * as Schema from "effect/Schema";import * as Struct from "effect/Struct";import * as SqlClient from "effect/unstable/sql/SqlClient";import * as SqlSchema from "effect/unstable/sql/SqlSchema"; import {  isPersistenceError,  toPersistenceDecodeError,  toPersistenceSqlError,  type ProjectionRepositoryError,} from "../../persistence/Errors.ts";import { ProjectionCheckpoint } from "../../persistence/Services/ProjectionCheckpoints.ts";import { ProjectionProject } from "../../persistence/Services/ProjectionProjects.ts";import { ProjectionState } from "../../persistence/Services/ProjectionState.ts";import { ProjectionThreadActivity } from "../../persistence/Services/ProjectionThreadActivities.ts";import { ProjectionThreadMessage } from "../../persistence/Services/ProjectionThreadMessages.ts";import { ProjectionThreadProposedPlan } from "../../persistence/Services/ProjectionThreadProposedPlans.ts";import { ProjectionThreadSession } from "../../persistence/Services/ProjectionThreadSessions.ts";import { ProjectionThread } from "../../persistence/Services/ProjectionThreads.ts";import * as RepositoryIdentityResolver from "../../project/RepositoryIdentityResolver.ts";import { ORCHESTRATION_PROJECTOR_NAMES } from "./ProjectionPipeline.ts";import {  ProjectionSnapshotQuery,  type ProjectionFullThreadDiffContext,  type ProjectionSnapshotCounts,  type ProjectionThreadCheckpointContext,  type ProjectionSnapshotQueryShape,} from "../Services/ProjectionSnapshotQuery.ts"; const decodeReadModel = Schema.decodeUnknownEffect(OrchestrationReadModel);const decodeShellSnapshot = Schema.decodeUnknownEffect(OrchestrationShellSnapshot);const decodeThread = Schema.decodeUnknownEffect(OrchestrationThread);const ProjectionProjectDbRowSchema = ProjectionProject.mapFields(  Struct.assign({    defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),    scripts: Schema.fromJsonString(Schema.Array(ProjectScript)),  }),);const ProjectionThreadMessageDbRowSchema = ProjectionThreadMessage.mapFields(  Struct.assign({    isStreaming: Schema.Number,    attachments: Schema.NullOr(Schema.fromJsonString(Schema.Array(ChatAttachment))),  }),);const ProjectionThreadProposedPlanDbRowSchema = ProjectionThreadProposedPlan;const ProjectionThreadDbRowSchema = ProjectionThread.mapFields(  Struct.assign({    modelSelection: Schema.fromJsonString(ModelSelection),  }),);const ProjectionThreadActivityDbRowSchema = ProjectionThreadActivity.mapFields(  Struct.assign({    payload: Schema.fromJsonString(Schema.Unknown),    sequence: Schema.NullOr(NonNegativeInt),  }),);const ProjectionThreadSessionDbRowSchema = ProjectionThreadSession;const ProjectionCheckpointDbRowSchema = ProjectionCheckpoint.mapFields(  Struct.assign({    files: Schema.fromJsonString(Schema.Array(OrchestrationCheckpointFile)),  }),);const ProjectionLatestTurnDbRowSchema = Schema.Struct({  threadId: ProjectionThread.fields.threadId,  turnId: TurnId,  state: Schema.String,  requestedAt: IsoDateTime,  startedAt: Schema.NullOr(IsoDateTime),  completedAt: Schema.NullOr(IsoDateTime),  assistantMessageId: Schema.NullOr(MessageId),  sourceProposedPlanThreadId: Schema.NullOr(ThreadId),  sourceProposedPlanId: Schema.NullOr(OrchestrationProposedPlanId),});const ProjectionStateDbRowSchema = ProjectionState;const ProjectionCountsRowSchema = Schema.Struct({  projectCount: Schema.Number,  threadCount: Schema.Number,});const WorkspaceRootLookupInput = Schema.Struct({  workspaceRoot: Schema.String,});const ProjectIdLookupInput = Schema.Struct({  projectId: ProjectId,});const ThreadIdLookupInput = Schema.Struct({  threadId: ThreadId,});const ProjectionProjectLookupRowSchema = ProjectionProjectDbRowSchema;const ProjectionThreadIdLookupRowSchema = Schema.Struct({  threadId: ThreadId,});const ProjectionThreadCheckpointContextThreadRowSchema = Schema.Struct({  threadId: ThreadId,  projectId: ProjectId,  workspaceRoot: Schema.String,  worktreePath: Schema.NullOr(Schema.String),});const FullThreadDiffContextLookupInput = Schema.Struct({  threadId: ThreadId,  checkpointTurnCount: NonNegativeInt,});const ProjectionFullThreadDiffContextRowSchema = Schema.Struct({  threadId: ThreadId,  projectId: ProjectId,  workspaceRoot: Schema.String,  worktreePath: Schema.NullOr(Schema.String),  latestCheckpointTurnCount: Schema.NullOr(NonNegativeInt),  toCheckpointRef: Schema.NullOr(CheckpointRef),}); const REQUIRED_SNAPSHOT_PROJECTORS = [  ORCHESTRATION_PROJECTOR_NAMES.projects,  ORCHESTRATION_PROJECTOR_NAMES.threads,  ORCHESTRATION_PROJECTOR_NAMES.threadMessages,  ORCHESTRATION_PROJECTOR_NAMES.threadProposedPlans,  ORCHESTRATION_PROJECTOR_NAMES.threadActivities,  ORCHESTRATION_PROJECTOR_NAMES.threadSessions,  ORCHESTRATION_PROJECTOR_NAMES.checkpoints,] as const; function maxIso(left: string | null, right: string): string {  if (left === null) {    return right;  }  return left > right ? left : right;} function computeSnapshotSequence(  stateRows: ReadonlyArray<Schema.Schema.Type<typeof ProjectionStateDbRowSchema>>,): number {  if (stateRows.length === 0) {    return 0;  }  const sequenceByProjector = new Map(    stateRows.map((row) => [row.projector, row.lastAppliedSequence] as const),  );   let minSequence = Number.POSITIVE_INFINITY;  for (const projector of REQUIRED_SNAPSHOT_PROJECTORS) {    const sequence = sequenceByProjector.get(projector);    if (sequence === undefined) {      return 0;    }    if (sequence < minSequence) {      minSequence = sequence;    }  }   return Number.isFinite(minSequence) ? minSequence : 0;} function mapLatestTurn(  row: Schema.Schema.Type<typeof ProjectionLatestTurnDbRowSchema>,): OrchestrationLatestTurn {  return {    turnId: row.turnId,    state:      row.state === "error"        ? "error"        : row.state === "interrupted"          ? "interrupted"          : row.state === "completed"            ? "completed"            : "running",    requestedAt: row.requestedAt,    startedAt: row.startedAt,    completedAt: row.completedAt,    assistantMessageId: row.assistantMessageId,    ...(row.sourceProposedPlanThreadId !== null && row.sourceProposedPlanId !== null      ? {          sourceProposedPlan: {            threadId: row.sourceProposedPlanThreadId,            planId: row.sourceProposedPlanId,          },        }      : {}),  };} function mapSessionRow(  row: Schema.Schema.Type<typeof ProjectionThreadSessionDbRowSchema>,): OrchestrationSession {  return {    threadId: row.threadId,    status: row.status,    providerName: row.providerName,    ...(row.providerInstanceId !== null ? { providerInstanceId: row.providerInstanceId } : {}),    runtimeMode: row.runtimeMode,    activeTurnId: row.activeTurnId,    lastError: row.lastError,    updatedAt: row.updatedAt,  };} function mapProjectShellRow(  row: Schema.Schema.Type<typeof ProjectionProjectDbRowSchema>,  repositoryIdentity: OrchestrationProject["repositoryIdentity"],): OrchestrationProjectShell {  return {    id: row.projectId,    title: row.title,    workspaceRoot: row.workspaceRoot,    repositoryIdentity,    defaultModelSelection: row.defaultModelSelection,    scripts: row.scripts,    createdAt: row.createdAt,    updatedAt: row.updatedAt,  };} function mapProposedPlanRow(  row: Schema.Schema.Type<typeof ProjectionThreadProposedPlanDbRowSchema>,): OrchestrationProposedPlan {  return {    id: row.planId,    turnId: row.turnId,    planMarkdown: row.planMarkdown,    implementedAt: row.implementedAt,    implementationThreadId: row.implementationThreadId,    createdAt: row.createdAt,    updatedAt: row.updatedAt,  };} function toPersistenceSqlOrDecodeError(sqlOperation: string, decodeOperation: string) {  return (cause: unknown): ProjectionRepositoryError =>    Schema.isSchemaError(cause)      ? toPersistenceDecodeError(decodeOperation)(cause)      : toPersistenceSqlError(sqlOperation)(cause);} const makeProjectionSnapshotQuery = Effect.gen(function* () {  const sql = yield* SqlClient.SqlClient;  const repositoryIdentityResolver = yield* RepositoryIdentityResolver.RepositoryIdentityResolver;  const repositoryIdentityResolutionConcurrency = 4;  const resolveRepositoryIdentitiesForProjects = Effect.fn(    "ProjectionSnapshotQuery.resolveRepositoryIdentitiesForProjects",  )(function* (    projectRows: ReadonlyArray<Schema.Schema.Type<typeof ProjectionProjectDbRowSchema>>,    options?: {      readonly includeDeleted?: boolean;    },  ) {    const filteredProjectRows =      options?.includeDeleted === true        ? projectRows        : projectRows.filter((row) => row.deletedAt === null);    const uniqueWorkspaceRoots = [...new Set(filteredProjectRows.map((row) => row.workspaceRoot))];    const repositoryIdentityByWorkspaceRoot = new Map(      yield* Effect.forEach(        uniqueWorkspaceRoots,        (workspaceRoot) =>          repositoryIdentityResolver            .resolve(workspaceRoot)            .pipe(Effect.map((identity) => [workspaceRoot, identity] as const)),        { concurrency: repositoryIdentityResolutionConcurrency },      ),    );     return new Map(      filteredProjectRows.map((row) => [        row.projectId,        repositoryIdentityByWorkspaceRoot.get(row.workspaceRoot) ?? null,      ]),    );  });   const listProjectRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionProjectDbRowSchema,    execute: () =>      sql`        SELECT          project_id AS "projectId",          title,          workspace_root AS "workspaceRoot",          default_model_selection_json AS "defaultModelSelection",          scripts_json AS "scripts",          created_at AS "createdAt",          updated_at AS "updatedAt",          deleted_at AS "deletedAt"        FROM projection_projects        ORDER BY created_at ASC, project_id ASC      `,  });   const listThreadRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadDbRowSchema,    execute: () =>      sql`        SELECT          thread_id AS "threadId",          project_id AS "projectId",          title,          model_selection_json AS "modelSelection",          runtime_mode AS "runtimeMode",          interaction_mode AS "interactionMode",          branch,          worktree_path AS "worktreePath",          latest_turn_id AS "latestTurnId",          created_at AS "createdAt",          updated_at AS "updatedAt",          archived_at AS "archivedAt",          settled_override AS "settledOverride",          settled_at AS "settledAt",          snoozed_until AS "snoozedUntil",          snoozed_at AS "snoozedAt",          latest_user_message_at AS "latestUserMessageAt",          pending_approval_count AS "pendingApprovalCount",          pending_user_input_count AS "pendingUserInputCount",          has_actionable_proposed_plan AS "hasActionableProposedPlan",          deleted_at AS "deletedAt"        FROM projection_threads        ORDER BY created_at ASC, thread_id ASC      `,  });   const listActiveThreadRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadDbRowSchema,    execute: () =>      sql`        SELECT          thread_id AS "threadId",          project_id AS "projectId",          title,          model_selection_json AS "modelSelection",          runtime_mode AS "runtimeMode",          interaction_mode AS "interactionMode",          branch,          worktree_path AS "worktreePath",          latest_turn_id AS "latestTurnId",          created_at AS "createdAt",          updated_at AS "updatedAt",          archived_at AS "archivedAt",          settled_override AS "settledOverride",          settled_at AS "settledAt",          snoozed_until AS "snoozedUntil",          snoozed_at AS "snoozedAt",          latest_user_message_at AS "latestUserMessageAt",          pending_approval_count AS "pendingApprovalCount",          pending_user_input_count AS "pendingUserInputCount",          has_actionable_proposed_plan AS "hasActionableProposedPlan",          deleted_at AS "deletedAt"        FROM projection_threads        WHERE deleted_at IS NULL          AND archived_at IS NULL        ORDER BY project_id ASC, created_at ASC, thread_id ASC      `,  });   const listArchivedThreadRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadDbRowSchema,    execute: () =>      sql`        SELECT          thread_id AS "threadId",          project_id AS "projectId",          title,          model_selection_json AS "modelSelection",          runtime_mode AS "runtimeMode",          interaction_mode AS "interactionMode",          branch,          worktree_path AS "worktreePath",          latest_turn_id AS "latestTurnId",          created_at AS "createdAt",          updated_at AS "updatedAt",          archived_at AS "archivedAt",          settled_override AS "settledOverride",          settled_at AS "settledAt",          snoozed_until AS "snoozedUntil",          snoozed_at AS "snoozedAt",          latest_user_message_at AS "latestUserMessageAt",          pending_approval_count AS "pendingApprovalCount",          pending_user_input_count AS "pendingUserInputCount",          has_actionable_proposed_plan AS "hasActionableProposedPlan",          deleted_at AS "deletedAt"        FROM projection_threads        WHERE deleted_at IS NULL          AND archived_at IS NOT NULL        ORDER BY project_id ASC, archived_at DESC, thread_id DESC      `,  });   const listThreadMessageRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadMessageDbRowSchema,    execute: () =>      sql`        SELECT          message_id AS "messageId",          thread_id AS "threadId",          turn_id AS "turnId",          role,          text,          attachments_json AS "attachments",          is_streaming AS "isStreaming",          created_at AS "createdAt",          updated_at AS "updatedAt"        FROM projection_thread_messages        ORDER BY thread_id ASC, created_at ASC, message_id ASC      `,  });   const listThreadProposedPlanRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadProposedPlanDbRowSchema,    execute: () =>      sql`        SELECT          plan_id AS "planId",          thread_id AS "threadId",          turn_id AS "turnId",          plan_markdown AS "planMarkdown",          implemented_at AS "implementedAt",          implementation_thread_id AS "implementationThreadId",          created_at AS "createdAt",          updated_at AS "updatedAt"        FROM projection_thread_proposed_plans        ORDER BY thread_id ASC, created_at ASC, plan_id ASC      `,  });   const listThreadActivityRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadActivityDbRowSchema,    execute: () =>      sql`        SELECT          activity_id AS "activityId",          thread_id AS "threadId",          turn_id AS "turnId",          tone,          kind,          summary,          payload_json AS "payload",          sequence,          created_at AS "createdAt"        FROM projection_thread_activities        ORDER BY          thread_id ASC,          sequence ASC,          created_at ASC,          activity_id ASC      `,  });   const listThreadSessionRows = SqlSchema.findAll({    Request: Schema.Void,    Result: ProjectionThreadSessionDbRowSchema,    execute: () =>      sql`        SELECT          thread_id AS "threadId",          status,          provider_name AS "providerName",          provider_instance_id AS "providerInstanceId",          provider_session_id AS "providerSessionId",          provider_thread_id AS "providerThreadId",          runtime_mode AS "runtimeMode",          active_turn_id AS "activeTurnId",          last_error AS "lastError",          updated_at AS "updatedAt"        FROM projection_thread_sessions        ORDER BY thread_id ASC      `,

Lines 1–500 of 2127.