import { Schema } from "effect"; import { EnvironmentId, ProjectId, ThreadId, TrimmedNonEmptyString } from "./baseSchemas"; export const ExecutionEnvironmentPlatformOs = Schema.Literals([ "darwin", "linux", "windows", "unknown", ]); export type ExecutionEnvironmentPlatformOs = typeof ExecutionEnvironmentPlatformOs.Type; export const ExecutionEnvironmentPlatformArch = Schema.Literals(["arm64", "x64", "other"]); export type ExecutionEnvironmentPlatformArch = typeof ExecutionEnvironmentPlatformArch.Type; export const ExecutionEnvironmentPlatform = Schema.Struct({ os: ExecutionEnvironmentPlatformOs, arch: ExecutionEnvironmentPlatformArch, }); export type ExecutionEnvironmentPlatform = typeof ExecutionEnvironmentPlatform.Type; export const ExecutionEnvironmentCapabilities = Schema.Struct({ repositoryIdentity: Schema.Boolean.pipe(Schema.withDecodingDefault(() => false)), }); export type ExecutionEnvironmentCapabilities = typeof ExecutionEnvironmentCapabilities.Type; export const ExecutionEnvironmentDescriptor = Schema.Struct({ environmentId: EnvironmentId, label: TrimmedNonEmptyString, platform: ExecutionEnvironmentPlatform, serverVersion: TrimmedNonEmptyString, capabilities: ExecutionEnvironmentCapabilities, }); export type ExecutionEnvironmentDescriptor = typeof ExecutionEnvironmentDescriptor.Type; export const EnvironmentConnectionState = Schema.Literals([ "connecting", "connected", "disconnected", "error", ]); export type EnvironmentConnectionState = typeof EnvironmentConnectionState.Type; export const RepositoryIdentityLocator = Schema.Struct({ source: Schema.Literal("git-remote"), remoteName: TrimmedNonEmptyString, remoteUrl: TrimmedNonEmptyString, }); export type RepositoryIdentityLocator = typeof RepositoryIdentityLocator.Type; export const RepositoryIdentity = Schema.Struct({ canonicalKey: TrimmedNonEmptyString, locator: RepositoryIdentityLocator, displayName: Schema.optionalKey(TrimmedNonEmptyString), provider: Schema.optionalKey(TrimmedNonEmptyString), owner: Schema.optionalKey(TrimmedNonEmptyString), name: Schema.optionalKey(TrimmedNonEmptyString), }); export type RepositoryIdentity = typeof RepositoryIdentity.Type; export const ScopedProjectRef = Schema.Struct({ environmentId: EnvironmentId, projectId: ProjectId, }); export type ScopedProjectRef = typeof ScopedProjectRef.Type; export const ScopedThreadRef = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, }); export type ScopedThreadRef = typeof ScopedThreadRef.Type; export const ScopedThreadSessionRef = Schema.Struct({ environmentId: EnvironmentId, threadId: ThreadId, }); export type ScopedThreadSessionRef = typeof ScopedThreadSessionRef.Type;