133 lines · 3.9 KB · TypeScript
RawDownload
import {  AcpRegistrySettings,  AntigravitySettings,  ClaudeSettings,  CodexSettings,  CursorSettings,  GrokSettings,  OpenCodeSettings,  ProviderDriverKind,} from "@t3tools/contracts";import type * as Schema from "effect/Schema";import {  ACPRegistryIcon,  AntigravityIcon,  ClaudeAI,  CursorIcon,  GrokIcon,  type Icon,  OpenAI,  OpenCodeIcon,} from "../Icons"; type ProviderSettingsSchema = {  readonly fields: Readonly<Record<string, Schema.Top>>;} & Schema.Top; /** * Browser-safe provider definition. This is deliberately shaped like the * future provider package client export: the core web app gets a schema with * field annotations plus provider-level presentation metadata, then renders * settings generically. */export interface ProviderClientDefinition {  readonly value: ProviderDriverKind;  readonly label: string;  readonly icon: Icon;  readonly settingsSchema: ProviderSettingsSchema;  readonly environmentFields?: readonly ProviderEnvironmentFieldDefinition[];  /** Whether this driver has a built-in default instance backed by legacy settings. */  readonly hasDefaultInstance?: boolean;  /**   * Optional short label rendered as a `variant="warning"` badge next to   * the instance title. Used to flag drivers that still ship under an   * early-access or preview gate — the flag is a property of the driver   * kind (not a specific instance), so every instance of that driver —   * built-in default or custom — advertises the same marker.   */  readonly badgeLabel?: string;} export interface ProviderEnvironmentFieldDefinition {  readonly name: string;  readonly label: string;  readonly description?: string;  readonly placeholder?: string;  readonly sensitive?: boolean;} export const PROVIDER_CLIENT_DEFINITIONS: readonly ProviderClientDefinition[] = [  {    value: ProviderDriverKind.make("codex"),    label: "Codex",    icon: OpenAI,    settingsSchema: CodexSettings,  },  {    value: ProviderDriverKind.make("claudeAgent"),    label: "Claude",    icon: ClaudeAI,    settingsSchema: ClaudeSettings,  },  {    value: ProviderDriverKind.make("cursor"),    label: "Cursor",    icon: CursorIcon,    settingsSchema: CursorSettings,    environmentFields: [      {        name: "CURSOR_API_KEY",        label: "Cursor API key",        description: "Required by the Cursor Agent SDK.",        placeholder: "Paste API key",        sensitive: true,      },    ],  },  {    value: ProviderDriverKind.make("grok"),    label: "Grok",    icon: GrokIcon,    settingsSchema: GrokSettings,  },  {    value: ProviderDriverKind.make("acpRegistry"),    label: "ACP Registry",    icon: ACPRegistryIcon,    badgeLabel: "V2 Preview",    settingsSchema: AcpRegistrySettings,    hasDefaultInstance: false,  },  {    value: ProviderDriverKind.make("opencode"),    label: "OpenCode",    icon: OpenCodeIcon,    settingsSchema: OpenCodeSettings,  },  {    value: ProviderDriverKind.make("antigravity"),    label: "Antigravity",    icon: AntigravityIcon,    settingsSchema: AntigravitySettings,  },]; export const PROVIDER_CLIENT_DEFINITION_BY_VALUE: Partial<  Record<ProviderDriverKind, ProviderClientDefinition>> = Object.fromEntries(  PROVIDER_CLIENT_DEFINITIONS.map((definition) => [definition.value, definition]),); export const DRIVER_OPTIONS = PROVIDER_CLIENT_DEFINITIONS;export const DRIVER_OPTION_BY_VALUE = PROVIDER_CLIENT_DEFINITION_BY_VALUE;export type DriverOption = ProviderClientDefinition; /** * Look up the driver metadata for an instance's `driver` field. Accepts * Returns `undefined` for fork / unknown drivers so callers can decide how * to render them — typically by falling back to a generic card. */export function getDriverOption(driver: ProviderDriverKind | undefined): DriverOption | undefined {  if (driver === undefined) return undefined;  return PROVIDER_CLIENT_DEFINITION_BY_VALUE[driver];}