mirror of
https://github.com/danielmiessler/fabric.git
synced 2026-09-10 07:36:44 -04:00
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:
parent
4ba8ac2919
commit
ec0b7246c4
53
README.md
53
README.md
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -480,6 +480,7 @@ pbpaste | fabric --pattern extract_wisdom
|
|||
- `1`:基本调试信息
|
||||
- `2`:详细调试
|
||||
- `3`:追踪级别
|
||||
- `4`:wire 级别(完整的请求和响应内容)
|
||||
|
||||
### 演习模式
|
||||
|
||||
|
|
|
|||
|
|
@ -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:' \
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')"`
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue