import * as Schema from "effect/Schema"; import { AuthSessionId, EnvironmentId, RpcClientId, ThreadId, TrimmedNonEmptyString, } from "./baseSchemas.ts"; import { ProviderInstanceId } from "./providerInstance.ts"; export const BackgroundBooleanState = Schema.Literals(["true", "false", "unknown"]); export type BackgroundBooleanState = typeof BackgroundBooleanState.Type; export const HostPowerThermalState = Schema.Literals([ "unknown", "nominal", "fair", "serious", "critical", ]); export type HostPowerThermalState = typeof HostPowerThermalState.Type; export const HostPowerSource = Schema.Literals([ "unknown", "node-macos-shell", "node-macos-native", "node-linux", "node-windows", "electron-main", ]); export type HostPowerSource = typeof HostPowerSource.Type; export const HostPowerSnapshot = Schema.Struct({ source: HostPowerSource, idle: BackgroundBooleanState, idleSeconds: Schema.NullOr(Schema.Number), locked: BackgroundBooleanState, suspended: Schema.Boolean, onBattery: BackgroundBooleanState, lowPowerMode: BackgroundBooleanState, thermalState: HostPowerThermalState, stale: Schema.Boolean, updatedAt: Schema.DateTimeUtc, }); export type HostPowerSnapshot = typeof HostPowerSnapshot.Type; export const BackgroundScope = Schema.Union([ Schema.Struct({ type: Schema.Literal("server-config") }), Schema.Struct({ type: Schema.Literal("provider-status"), instanceId: Schema.optionalKey(ProviderInstanceId), }), Schema.Struct({ type: Schema.Literal("vcs-status"), cwd: Schema.String }), Schema.Struct({ type: Schema.Literal("git-refs"), cwd: Schema.String }), Schema.Struct({ type: Schema.Literal("diagnostics") }), Schema.Struct({ type: Schema.Literal("thread"), threadId: ThreadId }), ]); export type BackgroundScope = typeof BackgroundScope.Type; export const ClientKind = Schema.Literals(["web", "desktop-renderer", "mobile", "unknown"]); export type ClientKind = typeof ClientKind.Type; export const ClientActivityClientId = TrimmedNonEmptyString.check(Schema.isMaxLength(128)); export type ClientActivityClientId = typeof ClientActivityClientId.Type; export const ClientActivityReportInput = Schema.Struct({ environmentId: Schema.optionalKey(EnvironmentId), clientId: ClientActivityClientId, clientKind: ClientKind, visible: Schema.Boolean, focused: Schema.Boolean, recentlyInteracted: Schema.Boolean, appState: Schema.optionalKey(Schema.Literals(["active", "inactive", "background", "unknown"])), lowPowerMode: Schema.optionalKey(BackgroundBooleanState), batteryState: Schema.optionalKey(Schema.Literals(["unknown", "unplugged", "charging", "full"])), networkType: Schema.optionalKey(Schema.String), scopes: Schema.Array(BackgroundScope), ttlMs: Schema.optionalKey(Schema.Number), observedAt: Schema.DateTimeUtc, }); export type ClientActivityReportInput = typeof ClientActivityReportInput.Type; export const ClientActivityLease = Schema.Struct({ sessionId: AuthSessionId, rpcClientId: RpcClientId, clientId: ClientActivityClientId, clientKind: ClientKind, visible: Schema.Boolean, focused: Schema.Boolean, recentlyInteracted: Schema.Boolean, appState: Schema.optionalKey(Schema.Literals(["active", "inactive", "background", "unknown"])), lowPowerMode: Schema.optionalKey(BackgroundBooleanState), batteryState: Schema.optionalKey(Schema.Literals(["unknown", "unplugged", "charging", "full"])), networkType: Schema.optionalKey(Schema.String), scopes: Schema.Array(BackgroundScope), updatedAt: Schema.DateTimeUtc, expiresAt: Schema.DateTimeUtc, }); export type ClientActivityLease = typeof ClientActivityLease.Type; export const BackgroundPolicySnapshot = Schema.Struct({ hostPower: HostPowerSnapshot, leases: Schema.Array(ClientActivityLease), activeForegroundLeaseCount: Schema.Number, activeScopeKeys: Schema.Array(Schema.String), shouldRunOpportunisticWork: Schema.Boolean, updatedAt: Schema.DateTimeUtc, }); export type BackgroundPolicySnapshot = typeof BackgroundPolicySnapshot.Type;