aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Argcfile.sh53
-rw-r--r--README.md12
-rwxr-xr-xbin/duckduckgo_search13
3 files changed, 49 insertions, 29 deletions
diff --git a/Argcfile.sh b/Argcfile.sh
index 21a35c7..4003313 100644
--- a/Argcfile.sh
+++ b/Argcfile.sh
@@ -45,7 +45,34 @@ build-declarations-json() {
# @cmd Build declaration for a single function
# @arg func![`_choice_func`] The function name
build-func-declaration() {
- argc --argc-export bin/$1 | \
+ argc --argc-export bin/$1 | _parse_declaration
+}
+
+# @cmd Build shims for the functions
+# Because Windows OS can't run bash scripts directly, we need to make a shim for each function
+#
+# @flag --clear Clear the shims
+build-win-shims() {
+ funcs=($(_choice_func))
+ for func in "${funcs[@]}"; do
+ echo "Shim bin/${func}.cmd"
+ _win_shim > "bin/${func}.cmd"
+ done
+}
+
+# @cmd Install this repo to aichat functions_dir
+install() {
+ functions_dir="$(aichat --info | grep functions_dir | awk '{print $2}')"
+ if [[ ! -e "$functions_dir" ]]; then
+ ln -s "$(pwd)" "$functions_dir"
+ echo "$functions_dir symlinked"
+ else
+ echo "$functions_dir already exists"
+ fi
+}
+
+
+_parse_declaration() {
jq -r '
def parse_description(flag_option):
if flag_option.describe == "" then
@@ -88,30 +115,6 @@ build-func-declaration() {
}'
}
-# @cmd Build shims for the functions
-# Because Windows OS can't run bash scripts directly, we need to make a shim for each function
-#
-# @flag --clear Clear the shims
-build-win-shims() {
- funcs=($(_choice_func))
- for func in "${funcs[@]}"; do
- echo "Shim bin/${func}.cmd"
- _win_shim > "bin/${func}.cmd"
- done
-}
-
-# @cmd Install this repo to aichat functions_dir
-install() {
- functions_dir="$(aichat --info | grep functions_dir | awk '{print $2}')"
- if [[ ! -e "$functions_dir" ]]; then
- ln -s "$(pwd)" "$functions_dir"
- echo "$functions_dir symlinked"
- else
- echo "$functions_dir already exists"
- fi
-}
-
-
_win_shim() {
cat <<-'EOF'
@echo off
diff --git a/README.md b/README.md
index 560c36c..c0995be 100644
--- a/README.md
+++ b/README.md
@@ -71,6 +71,18 @@ main() {
eval "$(argc --argc-eval "$0" "$@")"
```
+The relationship between flags/options and parameters in function declarations is as follows:
+
+```sh
+# @flag --boolean Parameter `{"type": "boolean"}`
+# @option --string Parameter `{"type": "string"}`
+# @option --string-enum[foo|bar] Parameter `{"type": "string", "enum": ["foo", "bar"]}`
+# @option --integer <INT> Parameter `{"type": "integer"}`
+# @option --number <NUM> Parameter `{"type": "number"}`
+# @option --array* <VALUE> Parameter `{"type": "array", "items": {"type":"string"}}`
+# @option --scalar-required! Use `!` to mark a scalar parameter as required.
+# @option --array-required+ Use `+` to mark a array parameter as required
+```
**After creating your function, don't forget to rebuild the function declarations.**
diff --git a/bin/duckduckgo_search b/bin/duckduckgo_search
index 3c3f2eb..91e49df 100755
--- a/bin/duckduckgo_search
+++ b/bin/duckduckgo_search
@@ -1,14 +1,19 @@
#!/usr/bin/env bash
set -e
-# @describe Use this function to search DuckDuckGo for a query.
+# @describe Takes in a query string and returns search result.
+# Use it to answer user questions that require dates, facts, real-time information, or news.
+# This ensures accurate and up-to-date answers.
# @meta require-tools ddgr
+# @env DDG_MAX_RESULTS=5 The max results to return.
# @option --query! The query to search for.
-# @option --max-results=5 The number of returned results.
main() {
- ddgr --num $argc_max_results --json "$argc_query" | \
- jq -r '.[] | "**[\(.title)](\(.url))**\n\(.abstract)\n"'
+ ddgr -n $DDG_MAX_RESULTS --json "$argc_query" | \
+ jq -r '. as $input |
+reduce range(0; length) as $i ([]; . + [ $input[$i] | .index = $i ]) |
+.[] | "### \(.index+1). \u001b]8;;\(.url)\u001b\\\(.title)\u001b]8;;\u001b\\\n\(.abstract)\n"
+'
}
eval "$(argc --argc-eval "$0" "$@")"