import { type EnvironmentId, type OrchestrationThread, type OrchestrationShellSnapshot, type ThreadId,} 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", "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<OrchestrationThread>, ConnectionPersistenceError>; readonly saveThread: ( environmentId: EnvironmentId, thread: OrchestrationThread, ) => Effect.Effect<void, ConnectionPersistenceError>; readonly removeThread: ( environmentId: EnvironmentId, threadId: ThreadId, ) => 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, }),}) {}
import {
type EnvironmentId,
type OrchestrationThread,
type OrchestrationShellSnapshot,
type ThreadId,
} 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",
"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<OrchestrationThread>, ConnectionPersistenceError>;
readonly saveThread: (
environmentId: EnvironmentId,
thread: OrchestrationThread,
) => Effect.Effect<void, ConnectionPersistenceError>;
readonly removeThread: (
environmentId: EnvironmentId,
threadId: ThreadId,
) => 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,
}),
}) {}