summaryrefslogtreecommitdiff
path: root/internal/appconfig/app_sections.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/appconfig/app_sections.go')
-rw-r--r--internal/appconfig/app_sections.go283
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
+}