chore: import Local-Cursor v1.1.8 source snapshot

Includes the current working directory changes. Historical commits and release binaries are excluded to limit Gitea storage.
Source base: d7515973fbfd6dd2001fa156c483455b8081c7cb
This commit is contained in:
FuDie0915
2026-11-10 01:24:28 +08:00
commit db73cf5a39
337 changed files with 147502 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
package config
import (
"context"
"strings"
"cursor/internal/modelchannel"
legacyruntime "cursor/internal/runtime"
)
const (
defaultChannelTimeoutMS = int((2 * 60 * 60) * 1000)
defaultChannelContextWindowTokens = 500_000
// 两类渠道的最大输出默认值按协议分道:
// openai 兼容网关对大 max_tokens 普遍宽容;anthropic 生态主流输出上限为 128K,
// 默认值越过服务方上限会直接返回 400(exceeds the configured maximum output length)。
defaultChannelMaxTokens = 278_000
defaultChannelAnthropicMaxTokens = 131_072
defaultChannelThinkingBudget = 4_096
defaultChannelAnthropicEffort = "xhigh"
)
func (manager *Manager) SelectChannelForModel(_ context.Context, modelID string) (*legacyruntime.ResolvedChannel, error) {
if manager == nil {
return nil, legacyruntime.ErrChannelNotAvailable
}
adapters, err := NormalizeModelAdapterConfigs(manager.Current().ModelAdapters)
if err != nil {
return nil, err
}
return resolveModelAdapterChannel(adapters, modelID)
}
func resolveModelAdapterChannel(adapters []ModelAdapterConfig, requestedModel string) (*legacyruntime.ResolvedChannel, error) {
matchIndex, ok := modelchannel.ResolveAdapterIndex(
adapters,
requestedModel,
func(adapter ModelAdapterConfig) string { return adapter.ID },
func(adapter ModelAdapterConfig) string { return adapter.ModelID },
func(adapter ModelAdapterConfig) string {
return modelchannel.BuildLegacyChannelID(adapter.BaseURL, adapter.ModelID, adapter.APIKey, adapter.DisplayName)
},
)
if !ok {
return nil, legacyruntime.ErrChannelNotAvailable
}
matched := adapters[matchIndex]
resolved := &legacyruntime.ResolvedChannel{
ID: strings.TrimSpace(matched.ID),
Name: strings.TrimSpace(matched.DisplayName),
GroupName: "local",
Code: strings.TrimSpace(matched.ID),
Provider: strings.TrimSpace(matched.Type),
BaseURL: strings.TrimSpace(matched.BaseURL),
APIKey: strings.TrimSpace(matched.APIKey),
Model: strings.TrimSpace(matched.ModelID),
OpenAIEndpoint: strings.TrimSpace(matched.OpenAIEndpoint),
OpenAIExtraParamsEnabled: matched.OpenAIExtraParamsEnabled,
OpenAIExtraParamsJSON: strings.TrimSpace(matched.OpenAIExtraParamsJSON),
CustomHeadersEnabled: matched.CustomHeadersEnabled,
CustomHeadersJSON: strings.TrimSpace(matched.CustomHeadersJSON),
AnthropicExtraParamsEnabled: matched.AnthropicExtraParamsEnabled,
AnthropicExtraParamsJSON: strings.TrimSpace(matched.AnthropicExtraParamsJSON),
TimeoutMS: defaultChannelTimeoutMS,
ContextWindowTokens: defaultChannelContextWindowTokens,
MaxTokens: defaultChannelMaxTokens,
ReasoningEffort: strings.TrimSpace(matched.ReasoningEffort),
AnthropicMaxTokens: defaultChannelAnthropicMaxTokens,
AnthropicThinkingEffort: defaultChannelAnthropicEffort,
ThinkingEnabled: true,
ThinkingBudgetTokens: defaultChannelThinkingBudget,
}
if matched.ContextWindowTokens > 0 {
resolved.ContextWindowTokens = matched.ContextWindowTokens
}
if matched.MaxCompletionTokens > 0 {
resolved.MaxTokens = matched.MaxCompletionTokens
}
if matched.AnthropicMaxTokens > 0 {
resolved.AnthropicMaxTokens = matched.AnthropicMaxTokens
}
if matched.ThinkingBudgetTokens > 0 {
resolved.ThinkingBudgetTokens = matched.ThinkingBudgetTokens
}
if strings.TrimSpace(matched.AnthropicThinkingEffort) != "" {
resolved.AnthropicThinkingEffort = strings.TrimSpace(matched.AnthropicThinkingEffort)
}
return resolved, nil
}