fix: declare completion arguments and synchronize CLI help

- Declare Fish completion arguments for dynamic and fixed values
- Enable filtered file suggestions for supported path options
- Add Spotify, transcription, metadata, and wire-debug completion options
- Include Grok among providers supporting web search completion
- Localize pattern, Spotify, and metadata help descriptions consistently
- Document expanded completion coverage and wire-level debug behavior
- Describe YouTube visual flags directly in generated help
This commit is contained in:
Kayvan Sylvan 2026-07-29 14:56:27 -07:00
parent 4ba8ac2919
commit ec0b7246c4
19 changed files with 143 additions and 81 deletions

View file

@ -664,37 +664,41 @@ Application Options:
-T, --topp= Set top P (default: 0.9)
-s, --stream Stream
-P, --presencepenalty= Set presence penalty (default: 0.0)
-r, --raw Use the defaults of the model without sending chat options
(temperature, top_p, etc.). Only affects OpenAI-compatible providers.
Anthropic models always use smart parameter selection to comply with
model-specific requirements.
-r, --raw Use the defaults of the model without sending chat options (temperature,
top_p, etc.). Only affects OpenAI-compatible providers. Anthropic models
always use smart parameter selection to comply with model-specific
requirements.
-F, --frequencypenalty= Set frequency penalty (default: 0.0)
-l, --listpatterns List all patterns
--readpattern= Print the contents of the named pattern to the terminal
-L, --listmodels List all available models
-x, --listcontexts List all contexts
-X, --listsessions List all sessions
-U, --updatepatterns Update patterns
-c, --copy Copy to clipboard
-m, --model= Choose model
-V, --vendor= Specify vendor for chosen model (e.g., -V "LM Studio" -m openai/gpt-oss-20b)
-V, --vendor= Specify vendor for the selected model (e.g., -V "LM Studio" -m
openai/gpt-oss-20b)
--modelContextLength= Model context length (only affects ollama)
-o, --output= Output to file
--output-session Output the entire session (also a temporary one) to the output file
-n, --latest= Number of latest patterns to list (default: 0)
-n, --latest= Number of latest patterns to list
-d, --changeDefaultModel Change default model
-y, --youtube= YouTube video or play list "URL" to grab transcript, comments from it
and send to chat or print it put to the console and store it in the
output file
-y, --youtube= YouTube video or play list "URL" to grab transcript, comments from it and
send to chat or print it put to the console and store it in the output file
--playlist Prefer playlist over video if both ids are present in the URL
--transcript Grab transcript from YouTube video and send to chat (it is used per
default).
--transcript-with-timestamps Grab transcript from YouTube video with timestamps and send to chat
--visual Extract visual data from video using OCR and FFmpeg
--visual-sensitivity Tolerance for FFmpeg scene detection (0.0 - 1.0)
--visual-fps Extract a specific number of frames per second instead of using scene detection
--visual-sensitivity= Tolerance for FFmpeg scene detection (0.0 - 1.0) (default: 0.4)
--visual-fps= Extract a specific number of frames per second instead of using scene
detection
--comments Grab comments from YouTube video and send to chat
--metadata Output video metadata
-g, --language= Specify the Language Code for the chat, e.g. -g=en -g=zh
--yt-dlp-args= Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')
--spotify= Spotify podcast or episode URL to grab metadata from and send to chat
-g, --language= Specify the Language Code for the chat, e.g. -g=en -g=zh -g=pt-BR -g=pt-PT
-u, --scrape_url= Scrape website URL to markdown using Jina AI
-q, --scrape_question= Search question using Jina AI
-e, --seed= Seed to be used for LMM generation
@ -725,23 +729,25 @@ Application Options:
--image-size= Image dimensions: 1024x1024, 1536x1024, 1024x1536, auto (default: auto)
--image-quality= Image quality: low, medium, high, auto (default: auto)
--image-compression= Compression level 0-100 for JPEG/WebP formats (default: not set)
--image-background= Background type: opaque, transparent (default: opaque, only for
PNG/WebP)
--image-background= Background type: opaque, transparent (default: opaque, only for PNG/WebP)
--suppress-think Suppress text enclosed in thinking tags
--think-start-tag= Start tag for thinking sections (default: <think>)
--think-end-tag= End tag for thinking sections (default: </think>)
--disable-responses-api Disable OpenAI Responses API (default: false)
--voice= TTS voice name for supported models (e.g., Kore, Charon, Puck)
(default: Kore)
--transcribe-file= Audio or video file to transcribe
--transcribe-model= Model to use for transcription (separate from chat model)
--split-media-file Split audio/video files larger than 25MB using ffmpeg
--voice= TTS voice name for supported models (e.g., Kore, Charon, Puck) (default:
Kore)
--list-gemini-voices List all available Gemini TTS voices
--list-transcription-models List all available transcription models
--notification Send desktop notification when command completes
--notification-command= Custom command to run for notifications (overrides built-in
notifications)
--yt-dlp-args= Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')
--thinking= Set reasoning/thinking level (e.g., off, low, medium, high, or
numeric tokens for Anthropic or Google Gemini)
--show-metadata Print metadata (input/output tokens) to stderr
--debug= Set debug level (0: off, 1: basic, 2: detailed, 3: trace)
--notification-command= Custom command to run for notifications (overrides built-in notifications)
--thinking= Set reasoning/thinking level (e.g., off, low, medium, high, or numeric
tokens for Anthropic or Google Gemini)
--show-metadata Print metadata to stderr
--debug= Set debug level (0=off, 1=basic, 2=detailed, 3=trace, 4=wire)
Help Options:
-h, --help Show this help message
```
@ -754,6 +760,7 @@ Use the `--debug` flag to control runtime logging:
- `1`: basic debug info
- `2`: detailed debugging
- `3`: trace level
- `4`: wire level (full request and response bodies)
### Dry Run Mode

View file

@ -480,6 +480,7 @@ pbpaste | fabric --pattern extract_wisdom
- `1`:基本调试信息
- `2`:详细调试
- `3`:追踪级别
- `4`wire 级别(完整的请求和响应内容)
### 演习模式

View file

@ -91,7 +91,7 @@ _fabric() {
'(-U --updatepatterns)'{-U,--updatepatterns}'[Update patterns]' \
'(-c --copy)'{-c,--copy}'[Copy to clipboard]' \
'(-m --model)'{-m,--model}'[Choose model]:model:_fabric_models' \
'(-V --vendor)'{-V,--vendor}'[Specify vendor for chosen model (e.g., -V "LM Studio" -m openai/gpt-oss-20b)]:vendor:_fabric_vendors' \
'(-V --vendor)'{-V,--vendor}'[Specify vendor for the selected model (e.g., -V "LM Studio" -m openai/gpt-oss-20b)]:vendor:_fabric_vendors' \
'(--modelContextLength)--modelContextLength[Model context length (only affects ollama)]:length:' \
'(-o --output)'{-o,--output}'[Output to file]:file:_files' \
'(--output-session)--output-session[Output the entire session to the output file]' \
@ -126,7 +126,7 @@ _fabric() {
'(--api-key)--api-key[API key used to secure server routes]:api-key:' \
'(--config)--config[Path to YAML config file]:config file:_files -g "*.yaml *.yml"' \
'(--version)--version[Print current version]' \
'(--search)--search[Enable web search tool for supported models (Anthropic, OpenAI, Gemini)]' \
'(--search)--search[Enable web search tool for supported models (Anthropic, OpenAI, Gemini, Grok)]' \
'(--search-location)--search-location[Set location for web search results]:location:' \
'(--image-file)--image-file[Save generated image to specified file path]:image file:_files -g "*.png *.webp *.jpeg *.jpg"' \
'(--image-size)--image-size[Image dimensions]:size:(1024x1024 1536x1024 1024x1536 auto)' \
@ -141,6 +141,7 @@ _fabric() {
'(--listvendors)--listvendors[List all vendors]' \
'(--voice)--voice[TTS voice name for supported models]:voice:_fabric_gemini_voices' \
'(--list-gemini-voices)--list-gemini-voices[List all available Gemini TTS voices]' \
'(--list-transcription-models)--list-transcription-models[List all available transcription models]' \
'(--shell-complete-list)--shell-complete-list[Output raw list without headers/formatting (for shell completion)]' \
'(--suppress-think)--suppress-think[Suppress text enclosed in thinking tags]' \
'(--think-start-tag)--think-start-tag[Start tag for thinking sections (default: <think>)]:start tag:' \
@ -149,6 +150,7 @@ _fabric() {
'(--transcribe-file)--transcribe-file[Audio or video file to transcribe]:audio file:_files -g "*.mp3 *.mp4 *.mpeg *.mpga *.m4a *.wav *.webm"' \
'(--transcribe-model)--transcribe-model[Model to use for transcription (separate from chat model)]:transcribe model:_fabric_transcription_models' \
'(--split-media-file)--split-media-file[Split audio/video files larger than 25MB using ffmpeg]' \
'(--show-metadata)--show-metadata[Print metadata to stderr]' \
'(--debug)--debug[Set debug level (0=off, 1=basic, 2=detailed, 3=trace, 4=wire)]:debug level:(0 1 2 3 4)' \
'(--notification)--notification[Send desktop notification when command completes]' \
'(--notification-command)--notification-command[Custom command to run for notifications]:notification command:' \

View file

@ -17,7 +17,7 @@ _fabric() {
fi
# Define all possible options/flags
local opts="--pattern -p --variable -v --context -C --session --attachment -a --setup -S --temperature -t --topp -T --stream -s --presencepenalty -P --raw -r --frequencypenalty -F --listpatterns -l --readpattern --listmodels -L --listcontexts -x --listsessions -X --updatepatterns -U --copy -c --model -m --vendor -V --modelContextLength --output -o --output-session --latest -n --changeDefaultModel -d --youtube -y --playlist --transcript --transcript-with-timestamps --visual --visual-sensitivity --visual-fps --comments --metadata --yt-dlp-args --language -g --scrape_url -u --scrape_question -q --seed -e --thinking --wipecontext -w --wipesession -W --printcontext --printsession --readability --input-has-vars --no-variable-replacement --dry-run --serve --serveOllama --address --api-key --config --search --search-location --image-file --image-size --image-quality --image-compression --image-background --suppress-think --think-start-tag --think-end-tag --disable-responses-api --transcribe-file --transcribe-model --split-media-file --voice --list-gemini-voices --notification --notification-command --debug --version --listextensions --addextension --rmextension --strategy --liststrategies --listvendors --shell-complete-list --help -h"
local opts="--pattern -p --variable -v --context -C --session --attachment -a --setup -S --temperature -t --topp -T --stream -s --presencepenalty -P --raw -r --frequencypenalty -F --listpatterns -l --readpattern --listmodels -L --listcontexts -x --listsessions -X --updatepatterns -U --copy -c --model -m --vendor -V --modelContextLength --output -o --output-session --latest -n --changeDefaultModel -d --youtube -y --playlist --transcript --transcript-with-timestamps --visual --visual-sensitivity --visual-fps --comments --metadata --yt-dlp-args --spotify --language -g --scrape_url -u --scrape_question -q --seed -e --thinking --wipecontext -w --wipesession -W --printcontext --printsession --readability --input-has-vars --no-variable-replacement --dry-run --serve --serveOllama --address --api-key --config --search --search-location --image-file --image-size --image-quality --image-compression --image-background --suppress-think --think-start-tag --think-end-tag --disable-responses-api --transcribe-file --transcribe-model --split-media-file --voice --list-gemini-voices --list-transcription-models --notification --notification-command --show-metadata --debug --version --listextensions --addextension --rmextension --strategy --liststrategies --listvendors --shell-complete-list --help -h"
# Helper function for dynamic completions
_fabric_get_list() {

View file

@ -53,57 +53,69 @@ function __fabric_get_transcription_models
end
# Main completion function
#
# Options that take a value must declare it. Use -x when only the listed values
# are valid, and -r when a file path is also valid. Fish ignores the -a list of
# an option that declares neither, and shows no suggestion after the option.
function __fabric_register_completions
set cmd $argv[1]
complete -c $cmd -f
# Flag completions with arguments
complete -c $cmd -s p -l pattern -d "Choose a pattern from the available patterns" -a "(__fabric_get_patterns)"
complete -c $cmd -l readpattern -d "Print the contents of the named pattern to the terminal" -a "(__fabric_get_patterns)"
complete -c $cmd -s v -l variable -d "Values for pattern variables, e.g. -v=#role:expert -v=#points:30"
complete -c $cmd -s C -l context -d "Choose a context from the available contexts" -a "(__fabric_get_contexts)"
complete -c $cmd -l session -d "Choose a session from the available sessions" -a "(__fabric_get_sessions)"
complete -c $cmd -s a -l attachment -d "Attachment path or URL (e.g. for OpenAI image recognition messages)" -r
complete -c $cmd -s t -l temperature -d "Set temperature (default: 0.7)"
complete -c $cmd -s T -l topp -d "Set top P (default: 0.9)"
complete -c $cmd -s P -l presencepenalty -d "Set presence penalty (default: 0.0)"
complete -c $cmd -s F -l frequencypenalty -d "Set frequency penalty (default: 0.0)"
complete -c $cmd -s m -l model -d "Choose model" -a "(__fabric_get_models)"
complete -c $cmd -s V -l vendor -d "Specify vendor for chosen model (e.g., -V \"LM Studio\" -m openai/gpt-oss-20b)" -a "(__fabric_get_vendors)"
complete -c $cmd -l modelContextLength -d "Model context length (only affects ollama)"
complete -c $cmd -s o -l output -d "Output to file" -r
complete -c $cmd -s n -l latest -d "Number of latest patterns to list (default: 0)"
complete -c $cmd -s y -l youtube -d "YouTube video or play list URL to grab transcript, comments from it"
complete -c $cmd -l visual-sensitivity -d "Tolerance for FFmpeg scene detection (0.0 - 1.0)"
complete -c $cmd -l visual-fps -d "Extract a specific number of frames per second instead of using scene detection"
complete -c $cmd -s g -l language -d "Specify the Language Code for the chat, e.g. -g=en -g=zh"
complete -c $cmd -s u -l scrape_url -d "Scrape website URL to markdown using Jina AI"
complete -c $cmd -s q -l scrape_question -d "Search question using Jina AI"
complete -c $cmd -s e -l seed -d "Seed to be used for LMM generation"
complete -c $cmd -l thinking -d "Set reasoning/thinking level" -a "off low medium high"
complete -c $cmd -s w -l wipecontext -d "Wipe context" -a "(__fabric_get_contexts)"
complete -c $cmd -s W -l wipesession -d "Wipe session" -a "(__fabric_get_sessions)"
complete -c $cmd -l printcontext -d "Print context" -a "(__fabric_get_contexts)"
complete -c $cmd -l printsession -d "Print session" -a "(__fabric_get_sessions)"
complete -c $cmd -l address -d "The address to bind the REST API (default: :8080)"
complete -c $cmd -l api-key -d "API key used to secure server routes"
complete -c $cmd -l config -d "Path to YAML config file" -r -a "*.yaml *.yml"
complete -c $cmd -l search-location -d "Set location for web search results (e.g., 'America/Los_Angeles')"
complete -c $cmd -l image-file -d "Save generated image to specified file path (e.g., 'output.png')" -r -a "*.png *.webp *.jpeg *.jpg"
complete -c $cmd -l image-size -d "Image dimensions: 1024x1024, 1536x1024, 1024x1536, auto (default: auto)" -a "1024x1024 1536x1024 1024x1536 auto"
complete -c $cmd -l image-quality -d "Image quality: low, medium, high, auto (default: auto)" -a "low medium high auto"
complete -c $cmd -l image-compression -d "Compression level 0-100 for JPEG/WebP formats (default: not set)" -r
complete -c $cmd -l image-background -d "Background type: opaque, transparent (default: opaque, only for PNG/WebP)" -a "opaque transparent"
complete -c $cmd -l addextension -d "Register a new extension from config file path" -r -a "*.yaml *.yml"
complete -c $cmd -l rmextension -d "Remove a registered extension by name" -a "(__fabric_get_extensions)"
complete -c $cmd -l strategy -d "Choose a strategy from the available strategies" -a "(__fabric_get_strategies)"
complete -c $cmd -l think-start-tag -d "Start tag for thinking sections (default: <think>)"
complete -c $cmd -l think-end-tag -d "End tag for thinking sections (default: </think>)"
complete -c $cmd -l voice -d "TTS voice name for supported models (e.g., Kore, Charon, Puck)" -a "(__fabric_get_gemini_voices)"
complete -c $cmd -l transcribe-file -d "Audio or video file to transcribe" -r -a "*.mp3 *.mp4 *.mpeg *.mpga *.m4a *.wav *.webm"
complete -c $cmd -l transcribe-model -d "Model to use for transcription (separate from chat model)" -a "(__fabric_get_transcription_models)"
complete -c $cmd -l debug -d "Set debug level (0=off, 1=basic, 2=detailed, 3=trace, 4=wire)" -a "0 1 2 3 4"
complete -c $cmd -l notification-command -d "Custom command to run for notifications (overrides built-in notifications)"
# Options that take a value from a dynamic list
complete -c $cmd -s p -l pattern -x -d "Choose a pattern from the available patterns" -a "(__fabric_get_patterns)"
complete -c $cmd -l readpattern -x -d "Print the contents of the named pattern to the terminal" -a "(__fabric_get_patterns)"
complete -c $cmd -s C -l context -x -d "Choose a context from the available contexts" -a "(__fabric_get_contexts)"
complete -c $cmd -l session -x -d "Choose a session from the available sessions" -a "(__fabric_get_sessions)"
complete -c $cmd -s m -l model -x -d "Choose model" -a "(__fabric_get_models)"
complete -c $cmd -s V -l vendor -x -d "Specify vendor for the selected model (e.g., -V \"LM Studio\" -m openai/gpt-oss-20b)" -a "(__fabric_get_vendors)"
complete -c $cmd -s w -l wipecontext -x -d "Wipe context" -a "(__fabric_get_contexts)"
complete -c $cmd -s W -l wipesession -x -d "Wipe session" -a "(__fabric_get_sessions)"
complete -c $cmd -l printcontext -x -d "Print context" -a "(__fabric_get_contexts)"
complete -c $cmd -l printsession -x -d "Print session" -a "(__fabric_get_sessions)"
complete -c $cmd -l rmextension -x -d "Remove a registered extension by name" -a "(__fabric_get_extensions)"
complete -c $cmd -l strategy -x -d "Choose a strategy from the available strategies" -a "(__fabric_get_strategies)"
complete -c $cmd -l voice -x -d "TTS voice name for supported models (e.g., Kore, Charon, Puck)" -a "(__fabric_get_gemini_voices)"
complete -c $cmd -l transcribe-model -x -d "Model to use for transcription (separate from chat model)" -a "(__fabric_get_transcription_models)"
# Options that take a value from a fixed list
complete -c $cmd -l thinking -x -d "Set reasoning/thinking level" -a "off low medium high"
complete -c $cmd -l image-size -x -d "Image dimensions: 1024x1024, 1536x1024, 1024x1536, auto (default: auto)" -a "1024x1024 1536x1024 1024x1536 auto"
complete -c $cmd -l image-quality -x -d "Image quality: low, medium, high, auto (default: auto)" -a "low medium high auto"
complete -c $cmd -l image-background -x -d "Background type: opaque, transparent (default: opaque, only for PNG/WebP)" -a "opaque transparent"
complete -c $cmd -l debug -x -d "Set debug level (0=off, 1=basic, 2=detailed, 3=trace, 4=wire)" -a "0 1 2 3 4"
# Options that take a file path
complete -c $cmd -s a -l attachment -r -d "Attachment path or URL (e.g. for OpenAI image recognition messages)"
complete -c $cmd -s o -l output -r -d "Output to file"
complete -c $cmd -l config -r -d "Path to YAML config file" -a "(__fish_complete_suffix .yaml .yml)"
complete -c $cmd -l addextension -r -d "Register a new extension from config file path" -a "(__fish_complete_suffix .yaml .yml)"
complete -c $cmd -l image-file -r -d "Save generated image to specified file path (e.g., 'output.png')" -a "(__fish_complete_suffix .png .webp .jpeg .jpg)"
complete -c $cmd -l transcribe-file -r -d "Audio or video file to transcribe" -a "(__fish_complete_suffix .mp3 .mp4 .mpeg .mpga .m4a .wav .webm)"
# Options that take a value the user types
complete -c $cmd -s v -l variable -x -d "Values for pattern variables, e.g. -v=#role:expert -v=#points:30"
complete -c $cmd -s t -l temperature -x -d "Set temperature (default: 0.7)"
complete -c $cmd -s T -l topp -x -d "Set top P (default: 0.9)"
complete -c $cmd -s P -l presencepenalty -x -d "Set presence penalty (default: 0.0)"
complete -c $cmd -s F -l frequencypenalty -x -d "Set frequency penalty (default: 0.0)"
complete -c $cmd -l modelContextLength -x -d "Model context length (only affects ollama)"
complete -c $cmd -s n -l latest -x -d "Number of latest patterns to list (default: 0)"
complete -c $cmd -s y -l youtube -x -d "YouTube video or play list URL to grab transcript, comments from it"
complete -c $cmd -l visual-sensitivity -x -d "Tolerance for FFmpeg scene detection (0.0 - 1.0) (default: 0.4)"
complete -c $cmd -l visual-fps -x -d "Extract a specific number of frames per second instead of using scene detection"
complete -c $cmd -l yt-dlp-args -x -d "Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')"
complete -c $cmd -l spotify -x -d "Spotify podcast or episode URL to grab metadata from and send to chat"
complete -c $cmd -s g -l language -x -d "Specify the Language Code for the chat, e.g. -g=en -g=zh"
complete -c $cmd -s u -l scrape_url -x -d "Scrape website URL to markdown using Jina AI"
complete -c $cmd -s q -l scrape_question -x -d "Search question using Jina AI"
complete -c $cmd -s e -l seed -x -d "Seed to be used for LMM generation"
complete -c $cmd -l address -x -d "The address to bind the REST API (default: :8080)"
complete -c $cmd -l api-key -x -d "API key used to secure server routes"
complete -c $cmd -l search-location -x -d "Set location for web search results (e.g., 'America/Los_Angeles')"
complete -c $cmd -l image-compression -x -d "Compression level 0-100 for JPEG/WebP formats (default: not set)"
complete -c $cmd -l think-start-tag -x -d "Start tag for thinking sections (default: <think>)"
complete -c $cmd -l think-end-tag -x -d "End tag for thinking sections (default: </think>)"
complete -c $cmd -l notification-command -x -d "Custom command to run for notifications (overrides built-in notifications)"
# Boolean flags (no arguments)
complete -c $cmd -s S -l setup -d "Run setup for all reconfigurable parts of fabric"
@ -123,12 +135,11 @@ function __fabric_register_completions
complete -c $cmd -l visual -d "Extract visual data from video using OCR and FFmpeg"
complete -c $cmd -l comments -d "Grab comments from YouTube video and send to chat"
complete -c $cmd -l metadata -d "Output video metadata"
complete -c $cmd -l yt-dlp-args -d "Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')"
complete -c $cmd -l readability -d "Convert HTML input into a clean, readable view"
complete -c $cmd -l input-has-vars -d "Apply variables to user input"
complete -c $cmd -l no-variable-replacement -d "Disable pattern variable replacement"
complete -c $cmd -l dry-run -d "Show what would be sent to the model without actually sending it"
complete -c $cmd -l search -d "Enable web search tool for supported models (Anthropic, OpenAI, Gemini)"
complete -c $cmd -l search -d "Enable web search tool for supported models (Anthropic, OpenAI, Gemini, Grok)"
complete -c $cmd -l serve -d "Serve the Fabric Rest API"
complete -c $cmd -l serveOllama -d "Serve the Fabric Rest API with ollama endpoints"
complete -c $cmd -l version -d "Print current version"
@ -136,13 +147,14 @@ function __fabric_register_completions
complete -c $cmd -l liststrategies -d "List all strategies"
complete -c $cmd -l listvendors -d "List all vendors"
complete -c $cmd -l list-gemini-voices -d "List all available Gemini TTS voices"
complete -c $cmd -l list-transcription-models -d "List all available transcription models"
complete -c $cmd -l shell-complete-list -d "Output raw list without headers/formatting (for shell completion)"
complete -c $cmd -l suppress-think -d "Suppress text enclosed in thinking tags"
complete -c $cmd -l disable-responses-api -d "Disable OpenAI Responses API (default: false)"
complete -c $cmd -l split-media-file -d "Split audio/video files larger than 25MB using ffmpeg"
complete -c $cmd -l notification -d "Send desktop notification when command completes"
complete -c $cmd -l show-metadata -d "Print metadata to stderr"
complete -c $cmd -s h -l help -d "Show this help message"
complete -c $cmd -l spotify -d 'Spotify podcast or episode URL to grab metadata'
end
__fabric_register_completions fabric

View file

@ -112,14 +112,18 @@ For manual installation or troubleshooting, see the detailed instructions below.
The completions provide intelligent suggestions for:
- **Patterns**: Tab-complete available patterns with `-p` or `--pattern`
- **Patterns**: Tab-complete available patterns with `-p`, `--pattern`, or `--readpattern`
- **Models**: Tab-complete available models with `-m` or `--model`
- **Vendors**: Tab-complete configured vendors with `-V` or `--vendor`
- **Contexts**: Tab-complete contexts for context-related flags
- **Sessions**: Tab-complete sessions for session-related flags
- **Strategies**: Tab-complete available strategies
- **Extensions**: Tab-complete registered extensions
- **Gemini Voices**: Tab-complete TTS voices for `--voice`
- **File paths**: Smart file completion for attachment, output, and config options
- **Transcription models**: Tab-complete models for `--transcribe-model`
- **Fixed value sets**: Tab-complete the accepted values of `--thinking`, `--debug`, `--image-size`,
`--image-quality`, and `--image-background`
- **File paths**: Smart file completion for attachment, output, config, image, and transcription options
- **Flag completion**: All available command-line flags and options
## Alternative Installation Method

View file

@ -57,9 +57,9 @@ type Flags struct {
YouTubePlaylist bool `long:"playlist" description:"Prefer playlist over video if both ids are present in the URL"`
YouTubeTranscript bool `long:"transcript" description:"Grab transcript from YouTube video and send to chat (it is used per default)."`
YouTubeTranscriptWithTimestamps bool `long:"transcript-with-timestamps" description:"Grab transcript from YouTube video with timestamps and send to chat"`
YouTubeVisual bool `long:"visual"`
YouTubeVisualSensitivity float64 `long:"visual-sensitivity" default:"0.4"`
YouTubeVisualFps int `long:"visual-fps" default:"0"`
YouTubeVisual bool `long:"visual" description:"Extract visual data from video using OCR and FFmpeg"`
YouTubeVisualSensitivity float64 `long:"visual-sensitivity" description:"Tolerance for FFmpeg scene detection (0.0 - 1.0)" default:"0.4"`
YouTubeVisualFps int `long:"visual-fps" description:"Extract a specific number of frames per second instead of using scene detection" default:"0"`
YouTubeComments bool `long:"comments" description:"Grab comments from YouTube video and send to chat"`
YouTubeMetadata bool `long:"metadata" description:"Output video metadata"`
YtDlpArgs string `long:"yt-dlp-args" yaml:"ytDlpArgs" description:"Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')"`

View file

@ -27,6 +27,7 @@ var flagDescriptionMap = map[string]string{
"raw": "use_model_defaults_raw_help",
"frequencypenalty": "set_frequency_penalty",
"listpatterns": "list_all_patterns",
"readpattern": "print_pattern_contents",
"listmodels": "list_all_available_models",
"listcontexts": "list_all_contexts",
"listsessions": "list_all_sessions",
@ -49,6 +50,7 @@ var flagDescriptionMap = map[string]string{
"comments": "grab_comments_from_youtube",
"metadata": "output_video_metadata",
"yt-dlp-args": "additional_yt_dlp_args",
"spotify": "spotify_url_help",
"language": "specify_language_code",
"scrape_url": "scrape_website_url",
"scrape_question": "search_question_jina",
@ -94,6 +96,7 @@ var flagDescriptionMap = map[string]string{
"notification": "send_desktop_notification",
"notification-command": "custom_notification_command",
"thinking": "set_reasoning_thinking_level",
"show-metadata": "print_metadata_to_stderr",
"debug": "set_debug_level",
}

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Playlist gegenüber Video bevorzugen, wenn beide IDs in der URL vorhanden sind",
"print_context": "Kontext ausgeben",
"print_current_version": "Aktuelle Version ausgeben",
"print_metadata_to_stderr": "Metadaten auf stderr ausgeben",
"print_pattern_contents": "Den Inhalt des angegebenen Musters im Terminal ausgeben",
"print_session": "Sitzung ausgeben",
"register_new_extension": "Neue Erweiterung aus Konfigurationsdateipfad registrieren",
"remove_registered_extension": "Registrierte Erweiterung nach Name entfernen",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Sendung**: %s",
"spotify_title_label": "**Titel**: %s",
"spotify_total_episodes_label": "**Episoden insgesamt**: %d",
"spotify_url_help": "Spotify-Podcast- oder Episoden-URL, um Metadaten abzurufen und an den Chat zu senden",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Start-Tag für Denk-Abschnitte",
"storage_error_delete": "%s konnte nicht gelöscht werden: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Prefer playlist over video if both ids are present in the URL",
"print_context": "Print context",
"print_current_version": "Print current version",
"print_metadata_to_stderr": "Print metadata to stderr",
"print_pattern_contents": "Print the contents of the named pattern to the terminal",
"print_session": "Print session",
"register_new_extension": "Register a new extension from config file path",
"remove_registered_extension": "Remove a registered extension by name",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Show**: %s",
"spotify_title_label": "**Title**: %s",
"spotify_total_episodes_label": "**Total Episodes**: %d",
"spotify_url_help": "Spotify podcast or episode URL to grab metadata from and send to chat",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Start tag for thinking sections",
"storage_error_delete": "could not delete %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Preferir lista de reproducción sobre video si ambos ids están presentes en la URL",
"print_context": "Imprimir contexto",
"print_current_version": "Imprimir versión actual",
"print_metadata_to_stderr": "Imprimir metadatos en stderr",
"print_pattern_contents": "Imprimir el contenido del patrón indicado en la terminal",
"print_session": "Imprimir sesión",
"register_new_extension": "Registrar una nueva extensión desde la ruta del archivo de configuración",
"remove_registered_extension": "Eliminar una extensión registrada por nombre",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Programa**: %s",
"spotify_title_label": "**Título**: %s",
"spotify_total_episodes_label": "**Total de episodios**: %d",
"spotify_url_help": "URL de podcast o episodio de Spotify para obtener metadatos y enviarlos al chat",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Etiqueta de inicio para secciones de pensamiento",
"storage_error_delete": "No se pudo eliminar %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "اولویت فهرست پخش نسبت به ویدیو اگر هر دو ID در URL موجود باشند",
"print_context": "چاپ زمینه",
"print_current_version": "چاپ نسخه فعلی",
"print_metadata_to_stderr": "چاپ فراداده در stderr",
"print_pattern_contents": "چاپ محتوای الگوی مشخص‌شده در ترمینال",
"print_session": "چاپ جلسه",
"register_new_extension": "ثبت افزونه جدید از مسیر فایل پیکربندی",
"remove_registered_extension": "حذف افزونه ثبت شده با نام",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**برنامه**: %s",
"spotify_title_label": "**عنوان**: %s",
"spotify_total_episodes_label": "**مجموع اپیزودها**: %d",
"spotify_url_help": "نشانی پادکست یا قسمت Spotify برای دریافت فراداده و ارسال به گفتگو",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "تگ شروع برای بخش‌های تفکر",
"storage_error_delete": "حذف %s ناموفق بود: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Préférer la liste de lecture à la vidéo si les deux IDs sont présents dans l'URL",
"print_context": "Afficher le contexte",
"print_current_version": "Afficher la version actuelle",
"print_metadata_to_stderr": "Afficher les métadonnées sur stderr",
"print_pattern_contents": "Afficher le contenu du motif indiqué dans le terminal",
"print_session": "Afficher la session",
"register_new_extension": "Enregistrer une nouvelle extension depuis le chemin du fichier de configuration",
"remove_registered_extension": "Supprimer une extension enregistrée par nom",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Émission** : %s",
"spotify_title_label": "**Titre** : %s",
"spotify_total_episodes_label": "**Épisodes au total** : %d",
"spotify_url_help": "URL de podcast ou d'épisode Spotify pour récupérer les métadonnées et les envoyer au chat",
"spotify_url_label": "**URL** : %s",
"start_tag_thinking_sections": "Balise de début pour les sections de réflexion",
"storage_error_delete": "Impossible de supprimer %s : %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Preferisci playlist al video se entrambi gli ID sono presenti nell'URL",
"print_context": "Stampa contesto",
"print_current_version": "Stampa versione corrente",
"print_metadata_to_stderr": "Stampa i metadati su stderr",
"print_pattern_contents": "Stampa il contenuto del pattern indicato nel terminale",
"print_session": "Stampa sessione",
"register_new_extension": "Registra una nuova estensione dal percorso del file di configurazione",
"remove_registered_extension": "Rimuovi un'estensione registrata per nome",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Show**: %s",
"spotify_title_label": "**Titolo**: %s",
"spotify_total_episodes_label": "**Episodi totali**: %d",
"spotify_url_help": "URL di podcast o episodio Spotify da cui ottenere i metadati e inviarli alla chat",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag di inizio per sezioni di pensiero",
"storage_error_delete": "Impossibile eliminare %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "URLに両方のIDが存在する場合、動画よりプレイリストを優先",
"print_context": "コンテキストを出力",
"print_current_version": "現在のバージョンを出力",
"print_metadata_to_stderr": "メタデータを stderr に出力",
"print_pattern_contents": "指定したパターンの内容をターミナルに出力",
"print_session": "セッションを出力",
"register_new_extension": "設定ファイルパスから新しい拡張機能を登録",
"remove_registered_extension": "名前で登録済み拡張機能を削除",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**番組**: %s",
"spotify_title_label": "**タイトル**: %s",
"spotify_total_episodes_label": "**エピソード合計**: %d",
"spotify_url_help": "メタデータを取得してチャットに送信する Spotify のポッドキャストまたはエピソードの URL",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "思考セクションの開始タグ",
"storage_error_delete": "%sを削除できませんでした: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Preferuj playlistę nad filmem, jeśli oba identyfikatory są obecne w URL",
"print_context": "Wydrukuj kontekst",
"print_current_version": "Wydrukuj bieżącą wersję",
"print_metadata_to_stderr": "Wypisz metadane na stderr",
"print_pattern_contents": "Wypisz zawartość wskazanego wzorca w terminalu",
"print_session": "Wydrukuj sesję",
"register_new_extension": "Zarejestruj nowe rozszerzenie z pliku konfiguracyjnego",
"remove_registered_extension": "Usuń zarejestrowane rozszerzenie według nazwy",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Program**: %s",
"spotify_title_label": "**Tytuł**: %s",
"spotify_total_episodes_label": "**Łączna liczba odcinków**: %d",
"spotify_url_help": "URL podcastu lub odcinka Spotify do pobrania metadanych i wysłania do czatu",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag początkowy dla sekcji myślenia",
"storage_error_delete": "nie można usunąć %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL",
"print_context": "Imprimir contexto",
"print_current_version": "Imprimir versão atual",
"print_metadata_to_stderr": "Imprimir metadados no stderr",
"print_pattern_contents": "Imprimir o conteúdo do padrão indicado no terminal",
"print_session": "Imprimir sessão",
"register_new_extension": "Registrar uma nova extensão do caminho do arquivo de configuração",
"remove_registered_extension": "Remover uma extensão registrada por nome",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Programa**: %s",
"spotify_title_label": "**Título**: %s",
"spotify_total_episodes_label": "**Total de episódios**: %d",
"spotify_url_help": "URL de podcast ou episódio do Spotify para obter metadados e enviar ao chat",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag inicial para seções de pensamento",
"storage_error_delete": "Não foi possível excluir %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL",
"print_context": "Imprimir contexto",
"print_current_version": "Imprimir versão atual",
"print_metadata_to_stderr": "Imprimir metadados no stderr",
"print_pattern_contents": "Imprimir o conteúdo do padrão indicado no terminal",
"print_session": "Imprimir sessão",
"register_new_extension": "Registar uma nova extensão do caminho do ficheiro de configuração",
"remove_registered_extension": "Remover uma extensão registada por nome",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**Programa**: %s",
"spotify_title_label": "**Título**: %s",
"spotify_total_episodes_label": "**Total de episódios**: %d",
"spotify_url_help": "URL de podcast ou episódio do Spotify para obter metadados e enviar ao chat",
"spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag inicial para secções de pensamento",
"storage_error_delete": "Não foi possível eliminar %s: %v",

View file

@ -492,6 +492,8 @@
"prefer_playlist_over_video": "如果 URL 中同时存在两个 ID则优先选择播放列表而不是视频",
"print_context": "打印上下文",
"print_current_version": "打印当前版本",
"print_metadata_to_stderr": "将元数据打印到 stderr",
"print_pattern_contents": "将指定模式的内容打印到终端",
"print_session": "打印会话",
"register_new_extension": "从配置文件路径注册新扩展",
"remove_registered_extension": "按名称删除已注册的扩展",
@ -600,6 +602,7 @@
"spotify_show_name_label": "**节目**%s",
"spotify_title_label": "**标题**%s",
"spotify_total_episodes_label": "**总剧集数**%d",
"spotify_url_help": "Spotify 播客或单集 URL用于获取元数据并发送到聊天",
"spotify_url_label": "**URL**%s",
"start_tag_thinking_sections": "思考部分的开始标签",
"storage_error_delete": "无法删除 %s%v",