131 lines · 4.6 KB · TypeScript
RawDownload
import {  type EnvironmentId,  type OrchestrationShellSnapshot,  type OrchestrationThreadDetailSnapshot,  type ServerConfig,  type ThreadId,  type VcsListRefsResult,} from "@t3tools/contracts";import * as Context from "effect/Context";import * as Effect from "effect/Effect";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; import type { ConnectionRegistration } from "../connection/catalog.ts";import type { ConnectionTarget } from "../connection/model.ts"; export class ConnectionPersistenceError extends Schema.TaggedErrorClass<ConnectionPersistenceError>()(  "ConnectionPersistenceError",  {    operation: Schema.Literals([      "list-targets",      "register-connection",      "remove-connection",      "load-shell",      "save-shell",      "load-thread",      "save-thread",      "remove-thread",      "load-server-config",      "save-server-config",      "load-vcs-refs",      "save-vcs-refs",      "remove-vcs-refs",      "clear-vcs-refs",      "clear-environment",    ]),    message: Schema.String,  },) {} export class ConnectionTargetStore extends Context.Service<  ConnectionTargetStore,  {    readonly list: Effect.Effect<ReadonlyArray<ConnectionTarget>, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/ConnectionTargetStore") {} export class ConnectionRegistrationStore extends Context.Service<  ConnectionRegistrationStore,  {    readonly register: (      registration: ConnectionRegistration,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly remove: (target: ConnectionTarget) => Effect.Effect<void, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/ConnectionRegistrationStore") {} export class EnvironmentCacheStore extends Context.Service<  EnvironmentCacheStore,  {    readonly loadShell: (      environmentId: EnvironmentId,    ) => Effect.Effect<Option.Option<OrchestrationShellSnapshot>, ConnectionPersistenceError>;    readonly saveShell: (      environmentId: EnvironmentId,      snapshot: OrchestrationShellSnapshot,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly loadThread: (      environmentId: EnvironmentId,      threadId: ThreadId,    ) => Effect.Effect<      Option.Option<OrchestrationThreadDetailSnapshot>,      ConnectionPersistenceError    >;    readonly saveThread: (      environmentId: EnvironmentId,      snapshot: OrchestrationThreadDetailSnapshot,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly removeThread: (      environmentId: EnvironmentId,      threadId: ThreadId,    ) => Effect.Effect<void, ConnectionPersistenceError>;    /**     * The last complete server configuration. This deliberately includes provider     * metadata so offline task creation can still offer the models a user last saw.     */    readonly loadServerConfig: (      environmentId: EnvironmentId,    ) => Effect.Effect<Option.Option<ServerConfig>, ConnectionPersistenceError>;    readonly saveServerConfig: (      environmentId: EnvironmentId,      config: ServerConfig,    ) => Effect.Effect<void, ConnectionPersistenceError>;    /**     * The unfiltered branch list for a workspace. Query-specific lists are not     * cached because they are incomplete and unsafe to present as a full picker.     */    readonly loadVcsRefs: (      environmentId: EnvironmentId,      cwd: string,    ) => Effect.Effect<Option.Option<VcsListRefsResult>, ConnectionPersistenceError>;    readonly saveVcsRefs: (      environmentId: EnvironmentId,      cwd: string,      refs: VcsListRefsResult,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly removeVcsRefs: (      environmentId: EnvironmentId,      cwd: string,    ) => Effect.Effect<void, ConnectionPersistenceError>;    /**     * Removes every persisted branch-list snapshot for an environment. Git ref     * mutations are repository-wide, and linked worktrees may have cached the     * same refs under different working-directory keys.     */    readonly clearVcsRefs: (      environmentId: EnvironmentId,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly clear: (      environmentId: EnvironmentId,    ) => Effect.Effect<void, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/EnvironmentCacheStore") {} export class EnvironmentOwnedDataCleanup extends Context.Reference<{  readonly clear: (environmentId: EnvironmentId) => Effect.Effect<void>;}>("@t3tools/client-runtime/platform/persistence/EnvironmentOwnedDataCleanup", {  defaultValue: () => ({    clear: () => Effect.void,  }),}) {}