132 lines · 4.4 KB · TypeScript
RawDownload
import * as Schema from "effect/Schema";import { TrimmedNonEmptyString } from "./baseSchemas.ts";import {  ApprovalRequestId,  EventId,  IsoDateTime,  ProviderItemId,  ThreadId,  TurnId,} from "./baseSchemas.ts";import {  ChatAttachment,  ModelSelection,  PROVIDER_SEND_TURN_MAX_ATTACHMENTS,  PROVIDER_SEND_TURN_MAX_INPUT_CHARS,  ProviderApprovalDecision,  ProviderApprovalPolicy,  ProviderInteractionMode,  ProviderRequestKind,  ProviderSandboxMode,  ProviderUserInputAnswers,  RuntimeMode,} from "./orchestration.ts";import { ProviderInstanceId, ProviderDriverKind } from "./providerInstance.ts"; const ProviderSessionStatus = Schema.Literals([  "connecting",  "ready",  "running",  "error",  "closed",]); export const ProviderSession = Schema.Struct({  provider: ProviderDriverKind,  // Optional during the driver/instance migration. Once every producer  // populates it (post-slice-4), routing flips to instance-id-only and the  // legacy `provider` field is removed.  providerInstanceId: Schema.optional(ProviderInstanceId),  status: ProviderSessionStatus,  runtimeMode: RuntimeMode,  cwd: Schema.optional(TrimmedNonEmptyString),  model: Schema.optional(TrimmedNonEmptyString),  threadId: ThreadId,  resumeCursor: Schema.optional(Schema.Unknown),  activeTurnId: Schema.optional(TurnId),  createdAt: IsoDateTime,  updatedAt: IsoDateTime,  lastError: Schema.optional(TrimmedNonEmptyString),});export type ProviderSession = typeof ProviderSession.Type; export const ProviderSessionStartInput = Schema.Struct({  threadId: ThreadId,  provider: Schema.optional(ProviderDriverKind),  // See ProviderSession for the migration story.  providerInstanceId: Schema.optional(ProviderInstanceId),  cwd: Schema.optional(TrimmedNonEmptyString),  title: Schema.optional(TrimmedNonEmptyString),  modelSelection: Schema.optional(ModelSelection),  resumeCursor: Schema.optional(Schema.Unknown),  approvalPolicy: Schema.optional(ProviderApprovalPolicy),  sandboxMode: Schema.optional(ProviderSandboxMode),  runtimeMode: RuntimeMode,});export type ProviderSessionStartInput = typeof ProviderSessionStartInput.Type; export const ProviderSendTurnInput = Schema.Struct({  threadId: ThreadId,  input: Schema.optional(    TrimmedNonEmptyString.check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_INPUT_CHARS)),  ),  attachments: Schema.optional(    Schema.Array(ChatAttachment).check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)),  ),  modelSelection: Schema.optional(ModelSelection),  interactionMode: Schema.optional(ProviderInteractionMode),});export type ProviderSendTurnInput = typeof ProviderSendTurnInput.Type; export const ProviderTurnStartResult = Schema.Struct({  threadId: ThreadId,  turnId: TurnId,  resumeCursor: Schema.optional(Schema.Unknown),});export type ProviderTurnStartResult = typeof ProviderTurnStartResult.Type; export const ProviderInterruptTurnInput = Schema.Struct({  threadId: ThreadId,  turnId: Schema.optional(TurnId),});export type ProviderInterruptTurnInput = typeof ProviderInterruptTurnInput.Type; export const ProviderStopSessionInput = Schema.Struct({  threadId: ThreadId,});export type ProviderStopSessionInput = typeof ProviderStopSessionInput.Type; export const ProviderRespondToRequestInput = Schema.Struct({  threadId: ThreadId,  requestId: ApprovalRequestId,  decision: ProviderApprovalDecision,});export type ProviderRespondToRequestInput = typeof ProviderRespondToRequestInput.Type; export const ProviderRespondToUserInputInput = Schema.Struct({  threadId: ThreadId,  requestId: ApprovalRequestId,  answers: ProviderUserInputAnswers,});export type ProviderRespondToUserInputInput = typeof ProviderRespondToUserInputInput.Type; const ProviderEventKind = Schema.Literals(["session", "notification", "request", "error"]); export const ProviderEvent = Schema.Struct({  id: EventId,  kind: ProviderEventKind,  provider: ProviderDriverKind,  // See ProviderSession for the migration story.  providerInstanceId: Schema.optional(ProviderInstanceId),  threadId: ThreadId,  createdAt: IsoDateTime,  method: TrimmedNonEmptyString,  message: Schema.optional(TrimmedNonEmptyString),  turnId: Schema.optional(TurnId),  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;