summaryrefslogtreecommitdiff
path: root/internal/cli
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-01 15:47:14 +0300
committerPaul Buetow <paul@buetow.org>2026-04-01 15:47:14 +0300
commit27b753192edca7005e6ee20b7be2a0c127294bd8 (patch)
tree22d9693bcc3cdb91adb7f1159a885615e0a14c52 /internal/cli
parent8e7063e78f5067f79d2a1a9e2b0fc2fde86d1f6e (diff)
z7: make Nano Banana help additive
Diffstat (limited to 'internal/cli')
-rw-r--r--internal/cli/command.go10
-rw-r--r--internal/cli/command_test.go15
2 files changed, 21 insertions, 4 deletions
diff --git a/internal/cli/command.go b/internal/cli/command.go
index ad32d23..46ab640 100644
--- a/internal/cli/command.go
+++ b/internal/cli/command.go
@@ -20,7 +20,9 @@ func CreateRootCommand(flags *Flags) *cobra.Command {
Long: `totalrecall generates Anki flashcard materials from Bulgarian words.
It creates audio pronunciation files using OpenAI TTS and downloads
-representative images using OpenAI or Gemini Nano Banana.
+representative images using the currently supported OpenAI image provider.
+
+Nano Banana model and text-model flags are exposed for upcoming runtime wiring.
Examples:
totalrecall # Launch interactive GUI (default)
@@ -55,7 +57,7 @@ func setupFlags(cmd *cobra.Command, flags *Flags) {
// Local flags
cmd.Flags().StringVarP(&flags.OutputDir, "output", "o", defaultOutputDir, "Output directory")
cmd.Flags().StringVarP(&flags.AudioFormat, "format", "f", flags.AudioFormat, "Audio format (wav or mp3)")
- cmd.Flags().StringVar(&flags.ImageAPI, "image-api", flags.ImageAPI, "Image source (openai or nanobanana; default: openai)")
+ cmd.Flags().StringVar(&flags.ImageAPI, "image-api", flags.ImageAPI, "Image source (currently openai)")
cmd.Flags().StringVar(&flags.BatchFile, "batch", "", "Process words from file (one per line)")
cmd.Flags().BoolVar(&flags.SkipAudio, "skip-audio", false, "Skip audio generation")
cmd.Flags().BoolVar(&flags.SkipImages, "skip-images", false, "Skip image download")
@@ -80,8 +82,8 @@ func setupFlags(cmd *cobra.Command, flags *Flags) {
cmd.Flags().StringVar(&flags.OpenAIImageStyle, "openai-image-style", flags.OpenAIImageStyle, "Image style: natural or vivid (dall-e-3 only)")
// Nano Banana Image Generation flags
- cmd.Flags().StringVar(&flags.NanoBananaModel, "nanobanana-model", flags.NanoBananaModel, "Nano Banana image model (Gemini image preview model)")
- cmd.Flags().StringVar(&flags.NanoBananaTextModel, "nanobanana-text-model", flags.NanoBananaTextModel, "Nano Banana text model for prompt generation")
+ cmd.Flags().StringVar(&flags.NanoBananaModel, "nanobanana-model", flags.NanoBananaModel, "Nano Banana image model for upcoming runtime wiring")
+ cmd.Flags().StringVar(&flags.NanoBananaTextModel, "nanobanana-text-model", flags.NanoBananaTextModel, "Nano Banana text model for upcoming runtime wiring")
// Bind flags to viper
if err := bindFlagsToViper(cmd); err != nil {
diff --git a/internal/cli/command_test.go b/internal/cli/command_test.go
index 1ebff95..ff0570c 100644
--- a/internal/cli/command_test.go
+++ b/internal/cli/command_test.go
@@ -23,6 +23,12 @@ func TestCreateRootCommand(t *testing.T) {
if !strings.Contains(cmd.Short, "Bulgarian Anki Flashcard Generator") {
t.Errorf("Expected Short description to contain 'Bulgarian Anki Flashcard Generator'")
}
+ if !strings.Contains(cmd.Long, "currently supported OpenAI image provider") {
+ t.Errorf("Expected Long description to describe the supported OpenAI image provider")
+ }
+ if strings.Contains(cmd.Long, "OpenAI or Gemini Nano Banana") {
+ t.Errorf("Long description should not imply Nano Banana runtime support")
+ }
// Test that flags are set up
flagTests := []struct {
@@ -103,6 +109,9 @@ func TestSetupFlags(t *testing.T) {
if imageAPIFlag.DefValue != "openai" {
t.Errorf("Expected default image-api to be openai, got %s", imageAPIFlag.DefValue)
}
+ if imageAPIFlag.Usage != "Image source (currently openai)" {
+ t.Errorf("Expected image-api help to describe only the current OpenAI provider, got %q", imageAPIFlag.Usage)
+ }
nanoBananaModelFlag := cmd.Flags().Lookup("nanobanana-model")
if nanoBananaModelFlag == nil {
@@ -111,6 +120,9 @@ func TestSetupFlags(t *testing.T) {
if nanoBananaModelFlag.DefValue != "gemini-3.1-flash-image-preview" {
t.Errorf("Expected default nanobanana-model to be gemini-3.1-flash-image-preview, got %s", nanoBananaModelFlag.DefValue)
}
+ if !strings.Contains(nanoBananaModelFlag.Usage, "upcoming runtime wiring") {
+ t.Errorf("Expected nanobanana-model help to describe future wiring, got %q", nanoBananaModelFlag.Usage)
+ }
nanoBananaTextModelFlag := cmd.Flags().Lookup("nanobanana-text-model")
if nanoBananaTextModelFlag == nil {
@@ -119,6 +131,9 @@ func TestSetupFlags(t *testing.T) {
if nanoBananaTextModelFlag.DefValue != "gemini-2.5-flash" {
t.Errorf("Expected default nanobanana-text-model to be gemini-2.5-flash, got %s", nanoBananaTextModelFlag.DefValue)
}
+ if !strings.Contains(nanoBananaTextModelFlag.Usage, "upcoming runtime wiring") {
+ t.Errorf("Expected nanobanana-text-model help to describe future wiring, got %q", nanoBananaTextModelFlag.Usage)
+ }
}
func TestInitConfig(t *testing.T) {