diff options
Diffstat (limited to 'internal/appconfig/app_sections.go')
| -rw-r--r-- | internal/appconfig/app_sections.go | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/internal/appconfig/app_sections.go b/internal/appconfig/app_sections.go new file mode 100644 index 0000000..ae60d7a --- /dev/null +++ b/internal/appconfig/app_sections.go @@ -0,0 +1,283 @@ +package appconfig + +import "slices" + +// CoreConfig contains core runtime and interaction settings. +type CoreConfig struct { + MaxTokens int + ContextMode string + ContextWindowLines int + MaxContextTokens int + LogPreviewLimit int + RequestTimeout int + CodingTemperature *float64 + ManualInvokeMinPrefix int + CompletionDebounceMs int + CompletionThrottleMs int + CompletionWaitAll *bool + TriggerCharacters []string + Provider string + InlineOpen string + InlineClose string + ChatSuffix string + ChatPrefixes []string +} + +// ProviderConfig contains provider endpoints/models and per-surface model overrides. +type ProviderConfig struct { + OpenAIBaseURL string + OpenAIModel string + OpenAITemperature *float64 + OpenRouterBaseURL string + OpenRouterModel string + OpenRouterTemperature *float64 + OllamaBaseURL string + OllamaModel string + OllamaTemperature *float64 + AnthropicBaseURL string + AnthropicModel string + AnthropicTemperature *float64 + CompletionConfigs []SurfaceConfig + CodeActionConfigs []SurfaceConfig + ChatConfigs []SurfaceConfig + CLIConfigs []SurfaceConfig +} + +// PromptConfig contains all prompt templates and custom action prompts. +type PromptConfig struct { + PromptCompletionSystemGeneral string + PromptCompletionSystemParams string + PromptCompletionSystemInline string + PromptCompletionUserGeneral string + PromptCompletionUserParams string + PromptCompletionExtraHeader string + PromptNativeCompletion string + PromptChatSystem string + PromptCodeActionRewriteSystem string + PromptCodeActionDiagnosticsSystem string + PromptCodeActionDocumentSystem string + PromptCodeActionRewriteUser string + PromptCodeActionDiagnosticsUser string + PromptCodeActionDocumentUser string + PromptCodeActionGoTestSystem string + PromptCodeActionGoTestUser string + PromptCodeActionSimplifySystem string + PromptCodeActionSimplifyUser string + PromptCLIDefaultSystem string + PromptCLIExplainSystem string + CustomActions []CustomAction + TmuxCustomMenuHotkey string +} + +// FeatureConfig contains non-LLM feature toggles/integration settings. +type FeatureConfig struct { + StatsWindowMinutes int + IgnoreGitignore *bool + IgnoreExtraPatterns []string + IgnoreLSPNotify *bool + TmuxEditPopupWidth string + TmuxEditPopupHeight string + TmuxEditDefaultAgent string + TmuxEditAgents []TmuxEditAgentCfg + MCPPromptsDir string + MCPSlashCommandSync bool + MCPSlashCommandDir string +} + +// AppSections is the focused split of App into subsystem-specific config groups. +type AppSections struct { + Core CoreConfig + Providers ProviderConfig + Prompts PromptConfig + Features FeatureConfig +} + +// Sections returns the app configuration split into focused sub-configs. +func (a App) Sections() AppSections { + return AppSections{ + Core: a.CoreSection(), + Providers: a.ProviderSection(), + Prompts: a.PromptSection(), + Features: a.FeatureSection(), + } +} + +// ApplySections applies focused sub-config groups back onto App. +func (a *App) ApplySections(sections AppSections) { + a.ApplyCoreSection(sections.Core) + a.ApplyProviderSection(sections.Providers) + a.ApplyPromptSection(sections.Prompts) + a.ApplyFeatureSection(sections.Features) +} + +// CoreSection returns the core runtime and interaction settings. +func (a App) CoreSection() CoreConfig { + return CoreConfig{ + MaxTokens: a.MaxTokens, + ContextMode: a.ContextMode, + ContextWindowLines: a.ContextWindowLines, + MaxContextTokens: a.MaxContextTokens, + LogPreviewLimit: a.LogPreviewLimit, + RequestTimeout: a.RequestTimeout, + CodingTemperature: a.CodingTemperature, + ManualInvokeMinPrefix: a.ManualInvokeMinPrefix, + CompletionDebounceMs: a.CompletionDebounceMs, + CompletionThrottleMs: a.CompletionThrottleMs, + CompletionWaitAll: a.CompletionWaitAll, + TriggerCharacters: slices.Clone(a.TriggerCharacters), + Provider: a.Provider, + InlineOpen: a.InlineOpen, + InlineClose: a.InlineClose, + ChatSuffix: a.ChatSuffix, + ChatPrefixes: slices.Clone(a.ChatPrefixes), + } +} + +// ApplyCoreSection applies core runtime and interaction settings. +func (a *App) ApplyCoreSection(core CoreConfig) { + a.MaxTokens = core.MaxTokens + a.ContextMode = core.ContextMode + a.ContextWindowLines = core.ContextWindowLines + a.MaxContextTokens = core.MaxContextTokens + a.LogPreviewLimit = core.LogPreviewLimit + a.RequestTimeout = core.RequestTimeout + a.CodingTemperature = core.CodingTemperature + a.ManualInvokeMinPrefix = core.ManualInvokeMinPrefix + a.CompletionDebounceMs = core.CompletionDebounceMs + a.CompletionThrottleMs = core.CompletionThrottleMs + a.CompletionWaitAll = core.CompletionWaitAll + a.TriggerCharacters = slices.Clone(core.TriggerCharacters) + a.Provider = core.Provider + a.InlineOpen = core.InlineOpen + a.InlineClose = core.InlineClose + a.ChatSuffix = core.ChatSuffix + a.ChatPrefixes = slices.Clone(core.ChatPrefixes) +} + +// ProviderSection returns provider endpoint/model settings and surface overrides. +func (a App) ProviderSection() ProviderConfig { + return ProviderConfig{ + OpenAIBaseURL: a.OpenAIBaseURL, + OpenAIModel: a.OpenAIModel, + OpenAITemperature: a.OpenAITemperature, + OpenRouterBaseURL: a.OpenRouterBaseURL, + OpenRouterModel: a.OpenRouterModel, + OpenRouterTemperature: a.OpenRouterTemperature, + OllamaBaseURL: a.OllamaBaseURL, + OllamaModel: a.OllamaModel, + OllamaTemperature: a.OllamaTemperature, + AnthropicBaseURL: a.AnthropicBaseURL, + AnthropicModel: a.AnthropicModel, + AnthropicTemperature: a.AnthropicTemperature, + CompletionConfigs: cloneSurfaceConfigs(a.CompletionConfigs), + CodeActionConfigs: cloneSurfaceConfigs(a.CodeActionConfigs), + ChatConfigs: cloneSurfaceConfigs(a.ChatConfigs), + CLIConfigs: cloneSurfaceConfigs(a.CLIConfigs), + } +} + +// ApplyProviderSection applies provider endpoint/model settings and surface overrides. +func (a *App) ApplyProviderSection(providers ProviderConfig) { + a.OpenAIBaseURL = providers.OpenAIBaseURL + a.OpenAIModel = providers.OpenAIModel + a.OpenAITemperature = providers.OpenAITemperature + a.OpenRouterBaseURL = providers.OpenRouterBaseURL + a.OpenRouterModel = providers.OpenRouterModel + a.OpenRouterTemperature = providers.OpenRouterTemperature + a.OllamaBaseURL = providers.OllamaBaseURL + a.OllamaModel = providers.OllamaModel + a.OllamaTemperature = providers.OllamaTemperature + a.AnthropicBaseURL = providers.AnthropicBaseURL + a.AnthropicModel = providers.AnthropicModel + a.AnthropicTemperature = providers.AnthropicTemperature + a.CompletionConfigs = cloneSurfaceConfigs(providers.CompletionConfigs) + a.CodeActionConfigs = cloneSurfaceConfigs(providers.CodeActionConfigs) + a.ChatConfigs = cloneSurfaceConfigs(providers.ChatConfigs) + a.CLIConfigs = cloneSurfaceConfigs(providers.CLIConfigs) +} + +// PromptSection returns prompt templates and custom action prompt settings. +func (a App) PromptSection() PromptConfig { + return PromptConfig{ + PromptCompletionSystemGeneral: a.PromptCompletionSystemGeneral, + PromptCompletionSystemParams: a.PromptCompletionSystemParams, + PromptCompletionSystemInline: a.PromptCompletionSystemInline, + PromptCompletionUserGeneral: a.PromptCompletionUserGeneral, + PromptCompletionUserParams: a.PromptCompletionUserParams, + PromptCompletionExtraHeader: a.PromptCompletionExtraHeader, + PromptNativeCompletion: a.PromptNativeCompletion, + PromptChatSystem: a.PromptChatSystem, + PromptCodeActionRewriteSystem: a.PromptCodeActionRewriteSystem, + PromptCodeActionDiagnosticsSystem: a.PromptCodeActionDiagnosticsSystem, + PromptCodeActionDocumentSystem: a.PromptCodeActionDocumentSystem, + PromptCodeActionRewriteUser: a.PromptCodeActionRewriteUser, + PromptCodeActionDiagnosticsUser: a.PromptCodeActionDiagnosticsUser, + PromptCodeActionDocumentUser: a.PromptCodeActionDocumentUser, + PromptCodeActionGoTestSystem: a.PromptCodeActionGoTestSystem, + PromptCodeActionGoTestUser: a.PromptCodeActionGoTestUser, + PromptCodeActionSimplifySystem: a.PromptCodeActionSimplifySystem, + PromptCodeActionSimplifyUser: a.PromptCodeActionSimplifyUser, + PromptCLIDefaultSystem: a.PromptCLIDefaultSystem, + PromptCLIExplainSystem: a.PromptCLIExplainSystem, + CustomActions: append([]CustomAction{}, a.CustomActions...), + TmuxCustomMenuHotkey: a.TmuxCustomMenuHotkey, + } +} + +// ApplyPromptSection applies prompt templates and custom action prompt settings. +func (a *App) ApplyPromptSection(prompts PromptConfig) { + a.PromptCompletionSystemGeneral = prompts.PromptCompletionSystemGeneral + a.PromptCompletionSystemParams = prompts.PromptCompletionSystemParams + a.PromptCompletionSystemInline = prompts.PromptCompletionSystemInline + a.PromptCompletionUserGeneral = prompts.PromptCompletionUserGeneral + a.PromptCompletionUserParams = prompts.PromptCompletionUserParams + a.PromptCompletionExtraHeader = prompts.PromptCompletionExtraHeader + a.PromptNativeCompletion = prompts.PromptNativeCompletion + a.PromptChatSystem = prompts.PromptChatSystem + a.PromptCodeActionRewriteSystem = prompts.PromptCodeActionRewriteSystem + a.PromptCodeActionDiagnosticsSystem = prompts.PromptCodeActionDiagnosticsSystem + a.PromptCodeActionDocumentSystem = prompts.PromptCodeActionDocumentSystem + a.PromptCodeActionRewriteUser = prompts.PromptCodeActionRewriteUser + a.PromptCodeActionDiagnosticsUser = prompts.PromptCodeActionDiagnosticsUser + a.PromptCodeActionDocumentUser = prompts.PromptCodeActionDocumentUser + a.PromptCodeActionGoTestSystem = prompts.PromptCodeActionGoTestSystem + a.PromptCodeActionGoTestUser = prompts.PromptCodeActionGoTestUser + a.PromptCodeActionSimplifySystem = prompts.PromptCodeActionSimplifySystem + a.PromptCodeActionSimplifyUser = prompts.PromptCodeActionSimplifyUser + a.PromptCLIDefaultSystem = prompts.PromptCLIDefaultSystem + a.PromptCLIExplainSystem = prompts.PromptCLIExplainSystem + a.CustomActions = append([]CustomAction{}, prompts.CustomActions...) + a.TmuxCustomMenuHotkey = prompts.TmuxCustomMenuHotkey +} + +// FeatureSection returns non-LLM feature toggles and integrations. +func (a App) FeatureSection() FeatureConfig { + return FeatureConfig{ + StatsWindowMinutes: a.StatsWindowMinutes, + IgnoreGitignore: a.IgnoreGitignore, + IgnoreExtraPatterns: slices.Clone(a.IgnoreExtraPatterns), + IgnoreLSPNotify: a.IgnoreLSPNotify, + TmuxEditPopupWidth: a.TmuxEditPopupWidth, + TmuxEditPopupHeight: a.TmuxEditPopupHeight, + TmuxEditDefaultAgent: a.TmuxEditDefaultAgent, + TmuxEditAgents: append([]TmuxEditAgentCfg{}, a.TmuxEditAgents...), + MCPPromptsDir: a.MCPPromptsDir, + MCPSlashCommandSync: a.MCPSlashCommandSync, + MCPSlashCommandDir: a.MCPSlashCommandDir, + } +} + +// ApplyFeatureSection applies non-LLM feature toggles and integrations. +func (a *App) ApplyFeatureSection(features FeatureConfig) { + a.StatsWindowMinutes = features.StatsWindowMinutes + a.IgnoreGitignore = features.IgnoreGitignore + a.IgnoreExtraPatterns = slices.Clone(features.IgnoreExtraPatterns) + a.IgnoreLSPNotify = features.IgnoreLSPNotify + a.TmuxEditPopupWidth = features.TmuxEditPopupWidth + a.TmuxEditPopupHeight = features.TmuxEditPopupHeight + a.TmuxEditDefaultAgent = features.TmuxEditDefaultAgent + a.TmuxEditAgents = append([]TmuxEditAgentCfg{}, features.TmuxEditAgents...) + a.MCPPromptsDir = features.MCPPromptsDir + a.MCPSlashCommandSync = features.MCPSlashCommandSync + a.MCPSlashCommandDir = features.MCPSlashCommandDir +} |
