package cli import ( "github.com/spf13/cobra" "gitea.maximumdirect.net/eric/seriatim/internal/builtin" "gitea.maximumdirect.net/eric/seriatim/internal/config" "gitea.maximumdirect.net/eric/seriatim/internal/pipeline" ) func newMergeCommand() *cobra.Command { var opts config.MergeOptions cmd := &cobra.Command{ Use: "merge", Short: "Run the transcript merge pipeline", RunE: func(cmd *cobra.Command, args []string) error { mergeOpts := opts if !cmd.Flags().Changed("output-schema") { mergeOpts.OutputSchema = "" } cfg, err := config.NewMergeConfig(mergeOpts) if err != nil { return err } return pipeline.Run(cmd.Context(), cfg, builtin.NewRegistry()) }, } flags := cmd.Flags() flags.StringArrayVar(&opts.InputFiles, "input-file", nil, "input transcript file; may be repeated") addOutputFileFlag(cmd, &opts.OutputFile) addReportFileFlag(cmd, &opts.ReportFile) flags.StringVar(&opts.SpeakersFile, "speakers", "", "speaker map file") flags.StringVar(&opts.AutocorrectFile, "autocorrect", "", "autocorrect rules file") flags.StringVar(&opts.InputReader, "input-reader", config.DefaultInputReader, "input reader module") addOutputModulesFlag(cmd, &opts.OutputModules) addMergeOutputSchemaFlag(cmd, &opts.OutputSchema) flags.StringVar(&opts.PreprocessingModules, "preprocessing-modules", config.DefaultPreprocessingModules, "comma-separated preprocessing modules") flags.StringVar(&opts.PostprocessingModules, "postprocessing-modules", config.DefaultPostprocessingModules, "comma-separated postprocessing modules") flags.StringVar(&opts.CoalesceGap, "coalesce-gap", config.DefaultCoalesceGapValue, "maximum same-speaker gap in seconds for coalesce") return cmd }