provider

package
v1.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 4, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// EnvMaxContextTokens is the fallback context size Claude Code assumes for a
	// model it does not recognize.
	EnvMaxContextTokens = "CLAUDE_CODE_MAX_CONTEXT_TOKENS"
	// EnvAutoCompactWindow is the absolute token count at which Claude Code
	// auto-compacts the conversation.
	EnvAutoCompactWindow = "CLAUDE_CODE_AUTO_COMPACT_WINDOW"

	// EnvContextBudgetMode is a ccl directive, not a Claude Code variable: it
	// selects who owns the two limits above for a subscription provider.
	//
	//	auto   (default) follow the window the backend advertises
	//	manual keep the configured values, even when they are larger
	//
	// The advertised number can itself be a client-side catalog cap rather than
	// the server's real limit, so "manual" exists to let a larger window be tried.
	EnvContextBudgetMode = "CCL_CONTEXT_BUDGET"

	// ContextBudgetManual is the EnvContextBudgetMode value that disables
	// backend-driven context management.
	ContextBudgetManual = "manual"

	// EnvAutoCompactPct is Claude Code's percentage-based auto-compact threshold.
	// It only ever lowers the trigger point, and Claude Code has repeatedly
	// ignored it when it arrives through the settings file, so ccl also exports it
	// to the child process environment.
	EnvAutoCompactPct = "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE"
)

Claude Code env vars that ccl manages through Provider.Env. They live here so the launcher, the config TUI and the diagnostics all agree on the spelling.

Variables

This section is empty.

Functions

func ApplyOAuthSlotDefaults added in v1.3.11

func ApplyOAuthSlotDefaults(p *Provider)

ApplyOAuthSlotDefaults fills empty Custom/Opus/Sonnet/Haiku slots with the preferred defaults for p.OAuthProvider. Existing user mappings are preserved.

func ClearUnavailablePreferredDefaults added in v1.3.11

func ClearUnavailablePreferredDefaults(p *Provider, availableModels []string)

ClearUnavailablePreferredDefaults removes preferred-default slot mappings that are absent from availableModels so the launcher can fall back to auto-discovery for those tiers. Non-preferred (user-customized) values are left untouched. availableModels is typically the live OAuth /models list; empty is a no-op. Mutates p in memory only — does not rewrite config.

func ContextBudgetIsManual added in v1.3.16

func ContextBudgetIsManual(p Provider) bool

ContextBudgetIsManual reports whether the provider opted out of backend-driven context management.

func InferOAuthProvider added in v1.3.2

func InferOAuthProvider(providerName, endpoint string) string

InferOAuthProvider restores the public OAuth provider name for configs written before oauthProvider was persisted. The oauth:// endpoint is an internal backend marker, so ordinary HTTP providers are never inferred.

func IsAnthropicType added in v1.2.7

func IsAnthropicType(providerType string) bool

func IsCclContextPreset added in v1.3.16

func IsCclContextPreset(env map[string]string) bool

IsCclContextPreset reports whether env holds one of the context presets a previous ccl version wrote, rather than values the user chose.

func IsOpenAICompatibleType added in v1.2.4

func IsOpenAICompatibleType(providerType string) bool

func IsOpenAIResponsesType added in v1.2.4

func IsOpenAIResponsesType(providerType string) bool

func ManagedContextEnvKeys added in v1.3.16

func ManagedContextEnvKeys() []string

ManagedContextEnvKeys are the context-sizing variables ccl forwards. They are exported to the Claude Code process as well as written to the settings file, because the settings-file channel has proven unreliable for them.

func OAuthRuntimeType added in v1.4.0

func OAuthRuntimeType(oauthProvider string) (string, bool)

OAuthRuntimeType returns the internal compatibility type ccl persists for an OAuth backend. Copilot is represented by openai_responses for local dispatch, but its actual upstream protocol is selected per model. ok is false when the backend is empty or unknown.

func PreferredOAuthSlotDefaults added in v1.3.11

func PreferredOAuthSlotDefaults(oauthProvider string) (custom, opus, sonnet, haiku string, ok bool)

PreferredOAuthSlotDefaults returns the first-choice Claude slot mapping for a subscription OAuth backend. ok is false when the backend has no built-in preferences and should rely entirely on runtime model discovery.

func ProtocolLabel added in v1.2.4

func ProtocolLabel(providerType string) string

ProtocolLabel returns a short, human-friendly protocol name for display purposes (e.g. in the `set` TUI, `ccl ls`, and `ccl doctor` output). It intentionally does NOT change the underlying stored provider.Type value, which remains a stable, machine-readable string ("anthropic", "openai", "openai_responses", ...) relied on throughout the codebase for dispatch logic (proxy, launcher, doctor, ...).

OpenAI exposes two distinct generation protocols behind the same "openai" umbrella:

  1. Chat Completions — the old standard, broadest compatibility: labeled "openai(chat)".
  2. Responses — the newer agent protocol: labeled "openai(responses)".

func ProtocolLabelForProvider added in v1.4.0

func ProtocolLabelForProvider(p Provider) string

ProtocolLabelForProvider reports the user-facing protocol, including OAuth backends whose real behavior cannot be inferred from the internal Type field.

func RuntimeModelSpec added in v1.3.4

func RuntimeModelSpec(p Provider) string

RuntimeModelSpec returns every model ID that Claude Code may send for this provider. Embedded runtimes use the list to register model routes and aliases.

Types

type AuthGroup added in v1.3.12

type AuthGroup struct {
	OAuthProvider string   `yaml:"oauthProvider" mapstructure:"oauthProvider"`
	Credentials   []string `yaml:"credentials" mapstructure:"credentials"`
}

AuthGroup is a homogeneous pool of OAuth credentials. Credentials contains canonical basenames under ~/.ccl/auth; models and Claude slot mappings live on the generated group Provider instead of being repeated per token.

type Config

type Config struct {
	ActiveProvider string `yaml:"active_provider" mapstructure:"active_provider"`
	Lang           string `yaml:"lang,omitempty" mapstructure:"lang,omitempty"`
	// BypassMode automatically passes --dangerously-skip-permissions to Claude
	// Code for every ccl-launched session. It is a global launcher setting.
	BypassMode bool `yaml:"bypass_mode,omitempty" mapstructure:"bypass_mode,omitempty"`
	// LogLevel is the threshold for ccl's per-session slog files: debug, info,
	// warn, error, or off. Config loading normalizes an omitted value to off.
	LogLevel string `yaml:"log_level,omitempty" mapstructure:"log_level,omitempty"`
	// DebugMode and DebugVerbose remain readable only to migrate configurations
	// written before `ccl debug` was renamed to `ccl log`.
	DebugMode    bool                 `yaml:"debug_mode,omitempty" mapstructure:"debug_mode,omitempty"`
	DebugVerbose bool                 `yaml:"debug_verbose,omitempty" mapstructure:"debug_verbose,omitempty"`
	Providers    map[string]Provider  `yaml:"providers" mapstructure:"providers"`
	AuthGroups   map[string]AuthGroup `yaml:"auth_groups,omitempty" mapstructure:"auth_groups,omitempty"`
}

type Provider

type Provider struct {
	Name     string `yaml:"name" mapstructure:"name"`
	Type     string `yaml:"type" mapstructure:"type"`
	Endpoint string `yaml:"endpoint" mapstructure:"endpoint"`
	APIKey   string `yaml:"apikey" mapstructure:"apikey"`
	// Model is ccl's local model pool used for TUI mapping, slot defaults, and
	// availability checks. For OpenAI-family providers it is also registered as
	// CLIProxyAPI model routes/aliases; direct Anthropic providers must expose
	// their own /v1/models to Claude Code.
	Model string            `yaml:"model" mapstructure:"model"`
	Env   map[string]string `yaml:"env,omitempty" mapstructure:"env,omitempty"`
	// AnthropicAuth controls how Claude Code authenticates direct Anthropic-compatible providers.
	// Empty and "x-api-key" use ANTHROPIC_API_KEY; "bearer" uses ANTHROPIC_AUTH_TOKEN.
	AnthropicAuth string `yaml:"anthropicAuth,omitempty" mapstructure:"anthropicAuth,omitempty"`
	// OAuthProvider selects an embedded subscription runtime. Supported
	// values are gpt, gemini, grok, copilot, qoder, kimi, kiro, and claude. The legacy chatgpt
	// codex value remains readable.
	OAuthProvider string `yaml:"oauthProvider,omitempty" mapstructure:"oauthProvider,omitempty"`
	// OAuthAccountCredential binds this provider to a single credential file
	// (basename of the JSON under ~/.ccl/auth). The OAuth runtime loads only
	// that account when set; empty falls back to all backend credentials.
	OAuthAccountCredential string `yaml:"oauthAccountCredential,omitempty" mapstructure:"oauthAccountCredential,omitempty"`
	// AuthGroup points at Config.AuthGroups. Group providers keep their model
	// mapping here while config.Load hydrates OAuthAccountCredentials from the
	// latest group membership before each command/launch.
	AuthGroup string `yaml:"authGroup,omitempty" mapstructure:"authGroup,omitempty"`
	// OAuthAccountCredentials is runtime-only. A non-nil slice means the OAuth
	// runtime must load exactly these files; an empty non-nil slice is an empty
	// group and must never fall back to every account on the backend.
	OAuthAccountCredentials []string `yaml:"-" mapstructure:"-"`

	// Custom model configuration (Claude Code native features)
	CustomModelID  string            `yaml:"customModelId,omitempty" mapstructure:"customModelId,omitempty"`   // ANTHROPIC_CUSTOM_MODEL_OPTION
	OpusModel      string            `yaml:"opusModel,omitempty" mapstructure:"opusModel,omitempty"`           // ANTHROPIC_DEFAULT_OPUS_MODEL
	SonnetModel    string            `yaml:"sonnetModel,omitempty" mapstructure:"sonnetModel,omitempty"`       // ANTHROPIC_DEFAULT_SONNET_MODEL
	HaikuModel     string            `yaml:"haikuModel,omitempty" mapstructure:"haikuModel,omitempty"`         // ANTHROPIC_DEFAULT_HAIKU_MODEL
	SubagentModel  string            `yaml:"subagentModel,omitempty" mapstructure:"subagentModel,omitempty"`   // CLAUDE_CODE_SUBAGENT_MODEL
	ModelOverrides map[string]string `yaml:"modelOverrides,omitempty" mapstructure:"modelOverrides,omitempty"` // modelOverrides in settings.json
	EffortLevel    string            `yaml:"effortLevel,omitempty" mapstructure:"effortLevel,omitempty"`       // CLAUDE_CODE_EFFORT_LEVEL; empty means Default/follow Claude
	// FastMode mirrors the Claude Code settings.json fastMode flag, the same
	// toggle flipped by the `/fast` slash command. It routes ChatGPT/Codex
	// subscription accounts through Codex's faster responses (≈1.5x speed) at
	// the cost of higher usage; only meaningful for the GPT/Codex Responses
	// OAuth backend. Empty/zero leaves Claude Code's own setting.
	FastMode bool `yaml:"fastMode,omitempty" mapstructure:"fastMode,omitempty"`
}

type SlotModel added in v1.3.16

type SlotModel struct {
	Slot  string
	Model string
}

SlotModel pairs a Claude Code model slot with the model mapped to it.

func SlotModels added in v1.3.16

func SlotModels(p Provider) []SlotModel

SlotModels lists the models mapped to Claude Code's slots, in menu order, skipping empty slots and stripping display-only markers such as [1m].

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL