syntax = "proto3";

package aiserver.v1;

// Sanitized subset of Cursor's current AvailableModels protocol. Field numbers
// and wire types match the official CLI; unknown fields remain forward-compatible.
message AvailableModelsRequest {
  bool is_nightly = 1;
  bool include_long_context_models = 2;
  bool exclude_max_named_models = 3;
  repeated string additional_model_names = 4;
  optional bool use_model_parameters = 5;
  optional bool include_hidden_models = 6;
  optional bool do_not_use_markdown = 7;
  optional bool variants_will_be_shown_in_exploded_list = 8;
  optional bool for_automations = 9;
  optional int32 scope = 10;
  optional bool use_react_model_picker = 11;
  optional bool use_cloud_agent_effort_modes = 12;
  optional string admin_settings_group_public_id = 13;
  optional bool byok_enabled = 14;
}

message AvailableModelsResponse {
  repeated string model_names = 1;
  repeated ModelDetails models = 2;
  bool use_model_parameters = 11;

  enum DegradationStatus {
    DEGRADATION_STATUS_UNSPECIFIED = 0;
    DEGRADATION_STATUS_DEGRADED = 1;
    DEGRADATION_STATUS_DISABLED = 2;
  }

  enum ModelVendorId {
    MODEL_VENDOR_ID_UNSPECIFIED = 0;
    MODEL_VENDOR_ID_ANTHROPIC = 1;
    MODEL_VENDOR_ID_OPENAI = 2;
    MODEL_VENDOR_ID_GOOGLE = 3;
    MODEL_VENDOR_ID_XAI = 4;
    MODEL_VENDOR_ID_MOONSHOT = 5;
    MODEL_VENDOR_ID_CURSOR = 6;
    MODEL_VENDOR_ID_NVIDIA = 7;
    MODEL_VENDOR_ID_ZAI = 8;
    MODEL_VENDOR_ID_META = 9;
  }

  message TooltipData {
    string primary_text = 1;
    string secondary_text = 2;
    string secondary_warning_text = 3;
    string icon = 4;
    string tertiary_text = 5;
    optional string tertiary_text_url = 6;
    optional string markdown_content = 7;
  }

  message ModelVendor {
    ModelVendorId id = 1;
    string display_name = 2;
  }

  message ModelVariantConfig {
    repeated ModelParameterValue parameter_values = 1;
    optional string display_name = 2;
    optional bool is_max_mode = 3;
    optional bool is_default_max_config = 4;
    optional bool is_default_non_max_config = 5;
    optional TooltipData tooltip_data = 6;
    optional string tagline = 7;
    optional string display_name_outside_picker = 8;
    optional string variant_string_representation = 9;
    optional ConfirmationDialogue confirmation_dialogue = 10;
    optional string legacy_slug = 11;
  }

  message ConfirmationDialogue {
    string title = 1;
    string body = 2;
    string key = 3;
    bool blocks_submission = 4;
  }

  message ModelDetails {
    string name = 1;
    bool default_on = 2;
    optional bool is_long_context_only = 3;
    optional bool is_chat_only = 4;
    optional bool supports_agent = 5;
    optional DegradationStatus degradation_status = 6;
    optional double price = 7;
    optional TooltipData tooltip_data = 8;
    optional bool supports_thinking = 9;
    optional bool supports_images = 10;
    optional bool supports_auto_context = 11;
    optional uint32 auto_context_max_tokens = 12;
    optional uint32 auto_context_extended_max_tokens = 13;
    optional bool supports_max_mode = 14;
    optional uint32 context_token_limit = 15;
    optional uint32 context_token_limit_for_max_mode = 16;
    optional string client_display_name = 17;
    optional string server_model_name = 18;
    optional bool supports_non_max_mode = 19;
    optional TooltipData tooltip_data_for_max_mode = 20;
    optional bool is_recommended_for_background_composer = 21;
    optional bool supports_plan_mode = 22;
    optional bool is_user_added = 23;
    optional string inputbox_short_model_name = 24;
    optional bool supports_sandboxing = 25;
    optional bool supports_cmd_k = 26;
    optional bool only_supports_cmd_k = 27;
    optional uint32 background_composer_sort_order = 28;
    repeated ModelParameterDefinition parameter_definitions = 29;
    repeated ModelVariantConfig variants = 30;
    optional int32 cloud_agent_effort_mode = 32;
    optional string cloud_migrate_to_model = 33;
    optional string upgrade_model_id = 34;
    optional bool is_hidden = 35;
    repeated string legacy_slugs = 36;
    repeated string id_aliases = 37;
    optional uint32 named_model_section_index = 38;
    optional string tagline = 39;
    optional bool visible_in_routed_model_view = 40;
    optional string vendor_name = 41;
    optional ModelVendor vendor = 42;
    optional bool default_disabled_in_admin_allowlist = 43;
    repeated int32 cloud_agent_effort_modes = 44;
    optional bool supports_smart_mode_classifier = 45;
    optional bool requires_data_retention = 46;
    optional string reason_for_zdr_consent_block = 47;
  }
}

message ModelParameterValue {
  string id = 1;
  string value = 2;
}

message ModelParameterDefinition {
  string id = 1;
  string name = 2;
  optional string markdown_tooltip = 3;
  ModelParameterType parameter_type = 4;
  optional bool is_cycleable_by_hotkey = 5;

  message ModelParameterType {
    optional BooleanParameterDefinition boolean_parameter = 1;
    optional EnumParameterDefinition enum_parameter = 2;
  }

  message BooleanParameterDefinition {
    repeated BooleanParameterValue values = 1;

    message BooleanParameterValue {
      string value = 1;
      optional string display_name = 2;
      optional bool increases_model_cost = 3;
      optional bool default_blocked_in_admin_allowlist = 4;
      optional bool hide_from_user_picker_when_admin_blocked = 5;
      optional bool blocked_by_admin_allowlist = 6;
    }
  }

  message EnumParameterDefinition {
    repeated EnumParameterValue values = 1;

    message EnumParameterValue {
      string value = 1;
      optional string display_name = 2;
      optional bool increases_model_cost = 3;
      optional bool blocked_by_admin_allowlist = 4;
      optional string markdown_tooltip = 5;
    }
  }
}

message ErrorDetails {
  CursorError error = 1;
  CustomErrorDetails details = 2;
  optional bool is_expected = 3;

  enum CursorError {
    ERROR_UNSPECIFIED = 0;
    ERROR_BAD_API_KEY = 1;
    ERROR_NOT_LOGGED_IN = 2;
    ERROR_INVALID_AUTH_ID = 3;
    ERROR_NOT_HIGH_ENOUGH_PERMISSIONS = 4;
    ERROR_BAD_MODEL_NAME = 5;
    ERROR_USER_NOT_FOUND = 6;
    ERROR_FREE_USER_RATE_LIMIT_EXCEEDED = 7;
    ERROR_PRO_USER_RATE_LIMIT_EXCEEDED = 8;
    ERROR_FREE_USER_USAGE_LIMIT = 9;
    ERROR_PRO_USER_USAGE_LIMIT = 10;
    ERROR_AUTH_TOKEN_NOT_FOUND = 11;
    ERROR_AUTH_TOKEN_EXPIRED = 12;
    ERROR_OPENAI = 13;
    ERROR_OPENAI_RATE_LIMIT_EXCEEDED = 14;
    ERROR_AGENT_REQUIRES_LOGIN = 18;
    ERROR_MAX_TOKENS = 20;
    ERROR_USER_ABORTED_REQUEST = 21;
    ERROR_GENERIC_RATE_LIMIT_EXCEEDED = 22;
    ERROR_PRO_USER_ONLY = 23;
    ERROR_TIMEOUT = 25;
    ERROR_GPT_4_VISION_PREVIEW_RATE_LIMIT = 28;
    ERROR_CUSTOM_MESSAGE = 29;
    ERROR_OUTDATED_CLIENT = 30;
    ERROR_CLAUDE_IMAGE_TOO_LARGE = 31;
    ERROR_FILE_NOT_FOUND = 33;
    ERROR_API_KEY_RATE_LIMIT = 34;
    ERROR_DEBOUNCED = 35;
    ERROR_BAD_REQUEST = 36;
    ERROR_REPOSITORY_SERVICE_REPOSITORY_IS_NOT_INITIALIZED = 37;
    ERROR_UNAUTHORIZED = 38;
    ERROR_NOT_FOUND = 39;
    ERROR_DEPRECATED = 40;
    ERROR_RESOURCE_EXHAUSTED = 41;
    ERROR_BAD_USER_API_KEY = 42;
    ERROR_CONVERSATION_TOO_LONG = 43;
    ERROR_USAGE_PRICING_REQUIRED = 44;
    ERROR_USAGE_PRICING_REQUIRED_CHANGEABLE = 45;
    ERROR_GITHUB_NO_USER_CREDENTIALS = 46;
    ERROR_GITHUB_USER_NO_ACCESS = 47;
    ERROR_GITHUB_APP_NO_ACCESS = 48;
    ERROR_GITHUB_MULTIPLE_OWNERS = 49;
    ERROR_RATE_LIMITED = 50;
    ERROR_RATE_LIMITED_CHANGEABLE = 51;
    ERROR_CUSTOM = 52;
    ERROR_HOOKS_BLOCKED = 53;
    ERROR_SUSPICIOUS_USAGE_BLOCKED = 54;
    ERROR_EXTENSION_HOST_TIMEOUT = 55;
    ERROR_NETWORK_ERROR = 56;
    ERROR_PROVIDER_ERROR = 57;
    ERROR_MODEL_BLOCKED = 58;
    ERROR_INTERNAL = 59;
    ERROR_MAX_MODE_REQUIRED = 60;
    ERROR_MODEL_NO_LONGER_SUPPORTED = 61;
    ERROR_PRICING_WARNING = 62;
    ERROR_SLOW_POOL = 63;
    ERROR_UNSUPPORTED_REGION = 64;
    ERROR_ACCOUNT_CLOSED = 65;
  }
}

message CustomErrorDetails {
  string title = 1;
  string detail = 2;
  optional bool allow_command_links_potentially_unsafe_please_only_use_for_handwritten_trusted_markdown = 3;
  optional bool is_retryable = 4;
  optional bool show_request_id = 5;
  optional bool should_show_immediate_error = 6;
}


message BidiAppendRequest {
  string data = 1;
  agent.v1.BidiRequestId request_id = 2;
  int64 append_seqno = 3;
  bytes data_binary = 4;
}

message BidiAppendResponse {}
