Documentation
¶
Index ¶
- Constants
- func ApplyOAuthSlotDefaults(p *Provider)
- func ClearUnavailablePreferredDefaults(p *Provider, availableModels []string)
- func ContextBudgetIsManual(p Provider) bool
- func InferOAuthProvider(providerName, endpoint string) string
- func IsAnthropicType(providerType string) bool
- func IsCclContextPreset(env map[string]string) bool
- func IsOpenAICompatibleType(providerType string) bool
- func IsOpenAIResponsesType(providerType string) bool
- func ManagedContextEnvKeys() []string
- func OAuthRuntimeType(oauthProvider string) (string, bool)
- func PreferredOAuthSlotDefaults(oauthProvider string) (custom, opus, sonnet, haiku string, ok bool)
- func ProtocolLabel(providerType string) string
- func ProtocolLabelForProvider(p Provider) string
- func RuntimeModelSpec(p Provider) string
- type AuthGroup
- type Config
- type Provider
- type SlotModel
Constants ¶
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
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
ContextBudgetIsManual reports whether the provider opted out of backend-driven context management.
func InferOAuthProvider ¶ added in v1.3.2
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 IsCclContextPreset ¶ added in v1.3.16
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 IsOpenAIResponsesType ¶ added in v1.2.4
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
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
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
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:
- Chat Completions — the old standard, broadest compatibility: labeled "openai(chat)".
- Responses — the newer agent protocol: labeled "openai(responses)".
func ProtocolLabelForProvider ¶ added in v1.4.0
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
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
SlotModel pairs a Claude Code model slot with the model mapped to it.
func SlotModels ¶ added in v1.3.16
SlotModels lists the models mapped to Claude Code's slots, in menu order, skipping empty slots and stripping display-only markers such as [1m].