package cli import ( "flag" "gitea.maximumdirect.net/eric/audita/internal/core/config" ) type processOverrideBinding func(*config.CLIOverrides, processFlags) var processOverrideBindings = map[string]processOverrideBinding{ "modules": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ModulesCSV = flags.modules }, "output-schema": func(overrides *config.CLIOverrides, flags processFlags) { overrides.OutputSchema = flags.outputSchema }, "llm-api-key": func(overrides *config.CLIOverrides, flags processFlags) { overrides.PrimaryLLMAPIKey = flags.llmAPIKey }, "validation-llm-api-key": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationLLMAPIKey = flags.validationLLMAPIKey }, "model": func(overrides *config.CLIOverrides, flags processFlags) { overrides.PrimaryModel = flags.model }, "validation-model": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationModel = flags.validationModel }, "base-url": func(overrides *config.CLIOverrides, flags processFlags) { overrides.PrimaryBaseURL = flags.baseURL }, "validation-base-url": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationBaseURL = flags.validationBaseURL }, "llm-timeout-seconds": func(overrides *config.CLIOverrides, flags processFlags) { overrides.PrimaryLLMTimeoutSeconds = flags.llmTimeoutSeconds }, "total-llm-concurrency": func(overrides *config.CLIOverrides, flags processFlags) { overrides.TotalLLMConcurrency = flags.totalLLMConcurrency }, "proposal-llm-concurrency": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ProposalLLMConcurrency = flags.proposalLLMConcurrency }, "llm-concurrency": func(overrides *config.CLIOverrides, flags processFlags) { overrides.PrimaryLLMConcurrency = flags.llmConcurrency }, "validation-llm-timeout-seconds": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationLLMTimeoutSeconds = flags.validationLLMTimeoutSeconds }, "max-retries": func(overrides *config.CLIOverrides, flags processFlags) { overrides.MaxRetries = flags.maxRetries }, "validation-max-retries": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationMaxRetries = flags.validationMaxRetries }, "validation-llm-concurrency": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationLLMConcurrency = flags.validationLLMConcurrency }, "validation-max-prompt-tokens": func(overrides *config.CLIOverrides, flags processFlags) { overrides.ValidationMaxPromptTokens = flags.validationMaxPromptTokens }, "max-section-tokens": func(overrides *config.CLIOverrides, flags processFlags) { overrides.MaxSectionTokens = flags.maxSectionTokens }, "min-section-tokens": func(overrides *config.CLIOverrides, flags processFlags) { overrides.MinSectionTokens = flags.minSectionTokens }, "target-sections": func(overrides *config.CLIOverrides, flags processFlags) { overrides.TargetSections = flags.targetSections }, "glossary-confidence-threshold": func(overrides *config.CLIOverrides, flags processFlags) { overrides.GlossaryConfidenceThreshold = flags.glossaryConfidenceThreshold }, "grammar-confidence-threshold": func(overrides *config.CLIOverrides, flags processFlags) { overrides.GrammarConfidenceThreshold = flags.grammarConfidenceThreshold }, "homophones-confidence-threshold": func(overrides *config.CLIOverrides, flags processFlags) { overrides.HomophonesConfidenceThreshold = flags.homophonesConfidenceThreshold }, "spoken-word-confidence-threshold": func(overrides *config.CLIOverrides, flags processFlags) { overrides.SpokenWordConfidenceThreshold = flags.spokenWordConfidenceThreshold }, "normalize-max-segment-gap": func(overrides *config.CLIOverrides, flags processFlags) { overrides.NormalizeMaxSegmentGap = flags.normalizeMaxSegmentGap }, "normalize-ellipsis-gap": func(overrides *config.CLIOverrides, flags processFlags) { overrides.NormalizeEllipsisGap = flags.normalizeEllipsisGap }, "normalize-max-segment-duration": func(overrides *config.CLIOverrides, flags processFlags) { overrides.NormalizeMaxSegmentDuration = flags.normalizeMaxSegmentDuration }, "normalize-max-segment-tokens": func(overrides *config.CLIOverrides, flags processFlags) { overrides.NormalizeMaxSegmentTokens = flags.normalizeMaxSegmentTokens }, "transcript-description": func(overrides *config.CLIOverrides, flags processFlags) { overrides.TranscriptDescription = flags.transcriptDescription }, "work-dir": func(overrides *config.CLIOverrides, flags processFlags) { overrides.WorkDir = flags.workDir }, "work-dir-retention": func(overrides *config.CLIOverrides, flags processFlags) { overrides.WorkDirRetention = flags.workDirRetention }, } func processCLIOverrides(fs *flag.FlagSet, flags processFlags) (config.CLIOverrides, bool) { overrides := config.CLIOverrides{} explicitModules := false fs.Visit(func(f *flag.Flag) { if f.Name == "modules" { explicitModules = true } binding, ok := processOverrideBindings[f.Name] if !ok { return } binding(&overrides, flags) }) return overrides, explicitModules }