provider

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: Aug 10, 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 window Claude Code uses as the basis for its
	// auto-compact threshold. EnvAutoCompactPct selects the percentage of it.
	EnvAutoCompactWindow = "CLAUDE_CODE_AUTO_COMPACT_WINDOW"

	// EnvContextBudgetMode is a retired ccl directive kept only so old provider
	// env maps can remove it instead of forwarding it to Claude Code.
	EnvContextBudgetMode = "CCL_CONTEXT_BUDGET"

	// 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"

	BalancedMaxContextTokens  = "500000"
	BalancedAutoCompactWindow = "500000"
	BalancedAutoCompactPct    = "80"
)

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 HasManagedContextEnv added in v1.5.0

func HasManagedContextEnv(env map[string]string) bool

HasManagedContextEnv reports whether any Claude Code context variable is set.

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 IsBalancedContextPreset added in v1.5.0

func IsBalancedContextPreset(env map[string]string) bool

IsBalancedContextPreset reports whether env contains ccl's one managed override: a 500K window compacted at 80% (approximately 400K).

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 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"`
}

type Provider

type Provider struct {
	Name string `yaml:"name" mapstructure:"name"`
	// Type selects the upstream protocol for a manual gateway. For OAuth
	// subscriptions it is only the local adapter compatibility type; the real
	// backend and authentication flow are selected by OAuthProvider.
	Type string `yaml:"type" mapstructure:"type"`
	// Endpoint is an HTTP API base for manual gateways and an oauth:// descriptor
	// for persisted subscriptions. Provider Session replaces the latter with a
	// loopback address only in its runtime copy.
	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 and codex values remain 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). Subscription runtimes require
	// this binding and load only that account.
	OAuthAccountCredential string `yaml:"oauthAccountCredential,omitempty" mapstructure:"oauthAccountCredential,omitempty"`

	// 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