import { Schema } from "effect"; import { TrimmedNonEmptyString } from "./baseSchemas"; import { ApprovalRequestId, EventId, IsoDateTime, NonNegativeInt, ProviderItemId, ProviderSessionId, ProviderThreadId, ProviderTurnId, ThreadId, } from "./baseSchemas"; import { ChatAttachment, PROVIDER_SEND_TURN_MAX_ATTACHMENTS, PROVIDER_SEND_TURN_MAX_INPUT_CHARS, ProviderApprovalDecision, ProviderApprovalPolicy, ProviderKind, ProviderRequestKind, ProviderSandboxMode, TurnCountRange, } from "./orchestration"; const TrimmedNonEmptyStringSchema = TrimmedNonEmptyString; export const ProviderSessionStatus = Schema.Literals([ "connecting", "ready", "running", "error", "closed", ]); export type ProviderSessionStatus = typeof ProviderSessionStatus.Type; export const ProviderSession = Schema.Struct({ sessionId: ProviderSessionId, provider: ProviderKind, status: ProviderSessionStatus, cwd: Schema.optional(TrimmedNonEmptyStringSchema), model: Schema.optional(TrimmedNonEmptyStringSchema), threadId: Schema.optional(ProviderThreadId), resumeCursor: Schema.optional(Schema.Unknown), activeTurnId: Schema.optional(ProviderTurnId), createdAt: IsoDateTime, updatedAt: IsoDateTime, lastError: Schema.optional(TrimmedNonEmptyStringSchema), }); export type ProviderSession = typeof ProviderSession.Type; export const ProviderSessionStartInput = Schema.Struct({ provider: Schema.optional(ProviderKind), cwd: Schema.optional(TrimmedNonEmptyStringSchema), model: Schema.optional(TrimmedNonEmptyStringSchema), resumeThreadId: Schema.optional(ProviderThreadId), resumeCursor: Schema.optional(Schema.Unknown), codexBinaryPath: Schema.optional(TrimmedNonEmptyStringSchema), codexHomePath: Schema.optional(TrimmedNonEmptyStringSchema), approvalPolicy: Schema.optional(ProviderApprovalPolicy), sandboxMode: Schema.optional(ProviderSandboxMode), }); export type ProviderSessionStartInput = typeof ProviderSessionStartInput.Type; export const ProviderSendTurnInput = Schema.Struct({ sessionId: ProviderSessionId, input: Schema.optional( TrimmedNonEmptyStringSchema.check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_INPUT_CHARS)), ), attachments: Schema.optional( Schema.Array(ChatAttachment).check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)), ), model: Schema.optional(TrimmedNonEmptyStringSchema), effort: Schema.optional(TrimmedNonEmptyStringSchema), }); export type ProviderSendTurnInput = typeof ProviderSendTurnInput.Type; export const ProviderTurnStartResult = Schema.Struct({ threadId: ProviderThreadId, turnId: ProviderTurnId, resumeCursor: Schema.optional(Schema.Unknown), }); export type ProviderTurnStartResult = typeof ProviderTurnStartResult.Type; export const ProviderInterruptTurnInput = Schema.Struct({ sessionId: ProviderSessionId, turnId: Schema.optional(ProviderTurnId), }); export type ProviderInterruptTurnInput = typeof ProviderInterruptTurnInput.Type; export const ProviderStopSessionInput = Schema.Struct({ sessionId: ProviderSessionId, }); export type ProviderStopSessionInput = typeof ProviderStopSessionInput.Type; export const ProviderListCheckpointsInput = Schema.Struct({ sessionId: ProviderSessionId, }); export type ProviderListCheckpointsInput = typeof ProviderListCheckpointsInput.Type; export const ProviderCheckpoint = Schema.Struct({ id: TrimmedNonEmptyStringSchema, turnCount: NonNegativeInt, messageCount: NonNegativeInt, label: TrimmedNonEmptyStringSchema, preview: Schema.optional(TrimmedNonEmptyStringSchema), isCurrent: Schema.Boolean, }); export type ProviderCheckpoint = typeof ProviderCheckpoint.Type; export const ProviderListCheckpointsResult = Schema.Struct({ threadId: ThreadId, checkpoints: Schema.Array(ProviderCheckpoint), }); export type ProviderListCheckpointsResult = typeof ProviderListCheckpointsResult.Type; export const ProviderRevertToCheckpointInput = Schema.Struct({ sessionId: ProviderSessionId, turnCount: NonNegativeInt, }); export type ProviderRevertToCheckpointInput = typeof ProviderRevertToCheckpointInput.Type; export const ProviderRevertToCheckpointResult = Schema.Struct({ threadId: ThreadId, turnCount: NonNegativeInt, messageCount: NonNegativeInt, rolledBackTurns: NonNegativeInt, checkpoints: Schema.Array(ProviderCheckpoint), }); export type ProviderRevertToCheckpointResult = typeof ProviderRevertToCheckpointResult.Type; export const ProviderGetCheckpointDiffInput = Schema.Struct({ sessionId: ProviderSessionId, ...TurnCountRange.fields, }); export type ProviderGetCheckpointDiffInput = typeof ProviderGetCheckpointDiffInput.Type; export const ProviderGetCheckpointDiffResult = Schema.Struct({ threadId: ThreadId, ...TurnCountRange.fields, diff: Schema.String, }); export type ProviderGetCheckpointDiffResult = typeof ProviderGetCheckpointDiffResult.Type; export const ProviderRespondToRequestInput = Schema.Struct({ sessionId: ProviderSessionId, requestId: ApprovalRequestId, decision: ProviderApprovalDecision, }); export type ProviderRespondToRequestInput = typeof ProviderRespondToRequestInput.Type; export const ProviderEventKind = Schema.Literals(["session", "notification", "request", "error"]); export type ProviderEventKind = typeof ProviderEventKind.Type; export const ProviderEvent = Schema.Struct({ id: EventId, kind: ProviderEventKind, provider: ProviderKind, sessionId: ProviderSessionId, createdAt: IsoDateTime, method: TrimmedNonEmptyStringSchema, message: Schema.optional(TrimmedNonEmptyStringSchema), threadId: Schema.optional(ProviderThreadId), turnId: Schema.optional(ProviderTurnId), itemId: Schema.optional(ProviderItemId), requestId: Schema.optional(ApprovalRequestId), requestKind: Schema.optional(ProviderRequestKind), textDelta: Schema.optional(Schema.String), payload: Schema.optional(Schema.Unknown), }); export type ProviderEvent = typeof ProviderEvent.Type; export type ProviderSendTurnAttachment = typeof ChatAttachment.Type; export type ProviderSendTurnAttachmentInput = typeof ChatAttachment.Type;