From d40473efecbf239dceca90b9684b0d36c01202c2 Mon Sep 17 00:00:00 2001 From: Jeet Dekivadia Date: Sat, 30 May 2026 03:24:24 -0700 Subject: [PATCH 1/2] Hide internal commands from initial shell completion Signed-off-by: Jeet Dekivadia --- internal/autocomplete/autocomplete.go | 4 +++- internal/autocomplete/autocomplete_test.go | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/autocomplete/autocomplete.go b/internal/autocomplete/autocomplete.go index 97fe1a8..927e2e2 100644 --- a/internal/autocomplete/autocomplete.go +++ b/internal/autocomplete/autocomplete.go @@ -216,7 +216,9 @@ func getAllPossibleCompletions(completionStyle CompletionStyle, root *cli.Comman completions := make([]ShellCompletion, 0) if len(args) == 0 { for _, child := range root.Commands { - completions = builder.createFromCommand("", child, completions) + if !child.Hidden { + completions = builder.createFromCommand("", child, completions) + } } return CompletionResult{Completions: completions, Behavior: ShellCompletionBehaviorDefault} } diff --git a/internal/autocomplete/autocomplete_test.go b/internal/autocomplete/autocomplete_test.go index 1e262a0..0056b52 100644 --- a/internal/autocomplete/autocomplete_test.go +++ b/internal/autocomplete/autocomplete_test.go @@ -17,6 +17,7 @@ func TestGetCompletions_EmptyArgs(t *testing.T) { {Name: "generate", Usage: "Generate SDK"}, {Name: "test", Usage: "Run tests"}, {Name: "build", Usage: "Build project"}, + {Name: "internal", Usage: "Internal command", Hidden: true}, }, } From d23a9b659976ab4ed6591ab0002c5bd7df5abd9d Mon Sep 17 00:00:00 2001 From: Jeet Dekivadia Date: Sat, 30 May 2026 12:34:14 -0700 Subject: [PATCH 2/2] Harden fish completion stderr handling Signed-off-by: Jeet Dekivadia --- internal/autocomplete/autocomplete_test.go | 12 ++++++++++++ .../autocomplete/shellscripts/fish_autocomplete.fish | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/internal/autocomplete/autocomplete_test.go b/internal/autocomplete/autocomplete_test.go index 0056b52..a45b8a3 100644 --- a/internal/autocomplete/autocomplete_test.go +++ b/internal/autocomplete/autocomplete_test.go @@ -241,6 +241,18 @@ func TestBashCompletionScriptDoesNotRegisterPlainCompletion(t *testing.T) { assert.False(t, strings.Contains(completionScript, "\ncomplete -F __openai_bash_autocomplete openai")) } +func TestFishCompletionScriptDoesNotWriteDebugLogs(t *testing.T) { + t.Parallel() + + completionScript, err := shellCompletions[CompletionStyleFish](&cli.Command{}, "openai") + if !assert.NoError(t, err) { + return + } + + assert.Contains(t, completionScript, "2>/dev/null") + assert.NotContains(t, completionScript, "fish-debug") +} + func TestGetCompletions_NonBoolFlagValue(t *testing.T) { t.Parallel() diff --git a/internal/autocomplete/shellscripts/fish_autocomplete.fish b/internal/autocomplete/shellscripts/fish_autocomplete.fish index b853057..9952ed0 100644 --- a/internal/autocomplete/shellscripts/fish_autocomplete.fish +++ b/internal/autocomplete/shellscripts/fish_autocomplete.fish @@ -7,7 +7,7 @@ function ____APPNAME___fish_autocomplete set -l cmd $tokens[1] set -l args $tokens[2..-1] - set -l completions (env COMPLETION_STYLE=fish $cmd __complete -- $args $current 2>>/tmp/fish-debug.log) + set -l completions (env COMPLETION_STYLE=fish $cmd __complete -- $args $current 2>/dev/null) set -l exit_code $status # Check for custom file completion patterns @@ -48,4 +48,3 @@ function ____APPNAME___fish_autocomplete end complete -c __APPNAME__ -f -a '(____APPNAME___fish_autocomplete)' -