package config // Config is the resolved combined configuration from pipeline.yml, // campaign.yml, and session.yml. type Config struct { Pipeline *PipelineConfig Campaign *CampaignConfig Session *SessionConfig PipelinePath string CampaignPath string SessionPath string StableInputs ResolvedStableInputs SessionSource SessionSource } // PipelineConfig contains durable pipeline-level settings. type PipelineConfig struct { Workspace WorkspaceConfig `yaml:"workspace"` Campaigns CampaignsConfig `yaml:"campaigns"` Storage StorageConfig `yaml:"storage"` Spool SpoolConfig `yaml:"spool"` Cache CacheConfig `yaml:"cache"` Publish *PublishConfig `yaml:"publish"` Secrets *SecretsConfig `yaml:"secrets"` WhisperX WhisperXConfig `yaml:"whisperx"` Seriatim SeriatimConfig `yaml:"seriatim"` Audita AuditaConfig `yaml:"audita"` Normalize *NormalizeConfig `yaml:"normalize"` Trim *TrimConfig `yaml:"trim"` Render *RenderConfig `yaml:"render"` Scriptorium *ScriptoriumConfig `yaml:"scriptorium"` Notification NotificationConfig `yaml:"notification"` } // CampaignsConfig configures the local campaign registry. type CampaignsConfig struct { Root string `yaml:"root"` DefaultCampaignID string `yaml:"default_campaign_id"` } // CampaignConfig contains stable campaign-level identity and input defaults. type CampaignConfig struct { CampaignID string `yaml:"campaign_id"` SessionTemplateFile string `yaml:"session_template_file"` Inputs CampaignInputsConfig `yaml:"inputs"` } // CampaignInputsConfig contains stable campaign-level input file references. type CampaignInputsConfig struct { SpeakersFile string `yaml:"speakers_file"` AutocorrectFile string `yaml:"autocorrect_file"` GlossaryFile string `yaml:"glossary_file"` } // SessionConfig contains per-session inputs and metadata. type SessionConfig struct { SessionID string `yaml:"session_id"` PreviousSessionID string `yaml:"previous_session_id"` Campaign string `yaml:"campaign"` Date string `yaml:"date"` Title string `yaml:"title"` Inputs SessionInputsConfig `yaml:"inputs"` } // WorkspaceConfig configures local workspace behavior. type WorkspaceConfig struct { Root string `yaml:"root"` CleanupAfterPublish bool `yaml:"cleanup_after_publish"` } // SecretsConfig configures optional local filesystem secret loading. type SecretsConfig struct { EnvDir string `yaml:"env_dir"` } // StorageConfig configures storage backends and related parameters. type StorageConfig struct { Backend string `yaml:"backend"` S3 *StorageS3Config `yaml:"s3"` } // StorageS3Config configures S3 storage coordinates. type StorageS3Config struct { Bucket string `yaml:"bucket"` RootPrefix string `yaml:"root_prefix"` Region string `yaml:"region"` Endpoint string `yaml:"endpoint"` ForcePathStyle bool `yaml:"force_path_style"` AccessKeyIDEnv string `yaml:"access_key_id_env"` SecretKeyEnv string `yaml:"secret_access_key_env"` } // SpoolConfig configures local spool storage for staged data. type SpoolConfig struct { Root string `yaml:"root"` DeleteAudioAfterPublish bool `yaml:"delete_audio_after_publish"` } // CacheConfig configures durable local caches for reusable remote inputs. type CacheConfig struct { Root string `yaml:"root"` S3Audio *bool `yaml:"s3_audio"` } // PublishConfig configures publish behavior and source-based output uploads. type PublishConfig struct { Enabled *bool `yaml:"enabled"` UploadRun *bool `yaml:"upload_run"` Outputs []PublishOutputRule `yaml:"outputs"` Locks []PublishLockRule `yaml:"locks"` } // PublishOutputRule configures one source-to-destination publish mapping. type PublishOutputRule struct { Source string `yaml:"source"` Dest string `yaml:"dest"` Required *bool `yaml:"required"` } // PublishLockRule prevents one source from overwriting its top-level published // destination. type PublishLockRule struct { Source string `yaml:"source"` Reason string `yaml:"reason"` } // PublishLockStore is the mutable per-session remote lock store. type PublishLockStore struct { Locks []PublishLockRule `yaml:"locks"` } // WhisperXConfig configures WhisperX adapter settings. type WhisperXConfig struct { TranscribeURL string `yaml:"transcribe_url"` Language string `yaml:"language"` Timeout string `yaml:"timeout"` Retries *int `yaml:"retries"` RetryDelay string `yaml:"retry_delay"` Concurrency *int `yaml:"concurrency"` } // SeriatimConfig configures seriatim adapter settings. type SeriatimConfig struct { Binary string `yaml:"binary"` Timeout string `yaml:"timeout"` OutputSchema string `yaml:"output_schema"` CoalesceGap *float64 `yaml:"coalesce_gap"` Report *bool `yaml:"report"` Env SeriatimEnvConfig `yaml:"env"` } // SeriatimEnvConfig configures optional advanced seriatim environment tuning. type SeriatimEnvConfig struct { OverlapWordRunGap *float64 `yaml:"overlap_word_run_gap"` OverlapWordRunReorderWindow *float64 `yaml:"overlap_word_run_reorder_window"` BackchannelMaxDuration *float64 `yaml:"backchannel_max_duration"` FillerMaxDuration *float64 `yaml:"filler_max_duration"` } // AuditaConfig configures audita adapter settings. type AuditaConfig struct { Binary string `yaml:"binary"` Timeout string `yaml:"timeout"` LLMAPIKeyEnv string `yaml:"llm_api_key_env"` Modules []string `yaml:"modules"` BaseURL string `yaml:"base_url"` Model string `yaml:"model"` TotalLLMConcurrency *int `yaml:"total_llm_concurrency"` ProposalLLMConcurrency *int `yaml:"proposal_llm_concurrency"` ValidationModel string `yaml:"validation_model"` ValidationLLMConcurrency *int `yaml:"validation_llm_concurrency"` TranscriptDescription string `yaml:"transcript_description"` ConfigPath string `yaml:"config_path"` OutputSchema string `yaml:"output_schema"` WorkDirRetention string `yaml:"work_dir_retention"` Report *bool `yaml:"report"` } // NormalizeConfig configures normalize-stage transcript schema/output behavior. type NormalizeConfig struct { OutputPath string `yaml:"output_path"` OutputSchema string `yaml:"output_schema"` Report *bool `yaml:"report"` outputPathSet bool `yaml:"-"` } // TrimConfig configures trim-stage transcript boundary behavior. type TrimConfig struct { Enabled bool `yaml:"enabled"` OutputPath string `yaml:"output_path"` Bounds TrimBoundsConfig `yaml:"bounds"` Seriatim TrimSeriatimConfig `yaml:"seriatim"` } // TrimBoundsConfig configures Scriptorium bounds prompt execution for trim. type TrimBoundsConfig struct { PromptID string `yaml:"prompt_id"` ProfileID string `yaml:"profile_id"` TranscriptInputName string `yaml:"transcript_input_name"` OutputPath string `yaml:"output_path"` Timeout string `yaml:"timeout"` RenderDebug bool `yaml:"render_debug"` RenderOutputPath string `yaml:"render_output_path"` } // TrimSeriatimConfig configures Seriatim options for trim output construction. type TrimSeriatimConfig struct { Report *bool `yaml:"report"` } // RenderConfig configures render-stage output formatting behavior. type RenderConfig struct { Enabled *bool `yaml:"enabled"` Format string `yaml:"format"` Title string `yaml:"title"` IncludeTimestamps *bool `yaml:"include_timestamps"` IncludeSegmentIDs bool `yaml:"include_segment_ids"` IncludeMetadata bool `yaml:"include_metadata"` } // ScriptoriumConfig configures Scriptorium-backed artifact generation. type ScriptoriumConfig struct { Binary string `yaml:"binary"` ConfigPath string `yaml:"config_path"` Timeout string `yaml:"timeout"` RenderDebug bool `yaml:"render_debug"` Artifacts map[string]ScriptoriumArtifactConfig `yaml:"artifacts"` } // ScriptoriumArtifactConfig configures one named output artifact workflow. type ScriptoriumArtifactConfig struct { Enabled bool `yaml:"enabled"` DependsOn []string `yaml:"depends_on"` RenderDebug *bool `yaml:"render_debug"` PromptID string `yaml:"prompt_id"` ProfileID string `yaml:"profile_id"` OutputPath string `yaml:"output_path"` Timeout string `yaml:"timeout"` Inputs map[string]ScriptoriumInputConfig `yaml:"inputs"` Vars map[string]any `yaml:"vars"` } // ScriptoriumInputConfig configures one named prompt input source. type ScriptoriumInputConfig struct { Source string `yaml:"source"` Artifact string `yaml:"artifact"` Path string `yaml:"path"` Required bool `yaml:"required"` } // NotificationConfig configures notification backend settings. type NotificationConfig struct { Backend string `yaml:"backend"` Recipient string `yaml:"recipient"` Timeout string `yaml:"timeout"` } // SessionInputsConfig contains per-session input references. type SessionInputsConfig struct { AudioDir string `yaml:"audio_dir"` AudioFiles []string `yaml:"audio_files"` AudioS3 *SessionAudioS3Input `yaml:"audio_s3"` SpeakersFile string `yaml:"speakers_file"` AutocorrectFile string `yaml:"autocorrect_file"` GlossaryFile string `yaml:"glossary_file"` } // SessionAudioS3Input configures S3 session-audio input discovery. type SessionAudioS3Input struct { Prefix string `yaml:"prefix"` } // ResolvedStableInputs records where stable input file paths came from after // campaign/session merge. type ResolvedStableInputs struct { SpeakersFile ResolvedInputFile AutocorrectFile ResolvedInputFile GlossaryFile ResolvedInputFile } // ResolvedInputFile records one merged config path and its source config file. type ResolvedInputFile struct { Path string ConfigPath string Source string } // SessionSource records where session.yml came from before materialization. type SessionSource struct { Source string LocalPath string S3Bucket string S3Key string S3Size int64 S3ETag string SpoolPath string }