From bfb7d75fe47ea588495c5be8157a67b1fec67a13 Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 6 Jun 2024 08:29:00 +0800 Subject: refactor: move tools/$lang/** to tools/** (#17) --- Argcfile.sh | 6 +++--- README.md | 8 ++++---- run/tool.js | 2 +- run/tool.py | 2 +- run/tool.rb | 2 +- run/tool.sh | 2 +- tools/get_current_time.sh | 11 +++++++++++ tools/get_current_weather.sh | 11 +++++++++++ tools/get_web_page.sh | 14 ++++++++++++++ tools/js/may_execute_js_code.js | 22 ---------------------- tools/may_execute_command.sh | 11 +++++++++++ tools/may_execute_js_code.js | 22 ++++++++++++++++++++++ tools/may_execute_py_code.py | 21 +++++++++++++++++++++ tools/may_execute_rb_code.rb | 22 ++++++++++++++++++++++ tools/py/may_execute_py_code.py | 21 --------------------- tools/rb/may_execute_rb_code.rb | 22 ---------------------- tools/search_duckduckgo.sh | 16 ++++++++++++++++ tools/search_wolframalpha.sh | 24 ++++++++++++++++++++++++ tools/sh/get_current_time.sh | 11 ----------- tools/sh/get_current_weather.sh | 11 ----------- tools/sh/get_web_page.sh | 14 -------------- tools/sh/may_execute_command.sh | 11 ----------- tools/sh/search_duckduckgo.sh | 16 ---------------- tools/sh/search_wolframalpha.sh | 24 ------------------------ 24 files changed, 163 insertions(+), 163 deletions(-) create mode 100755 tools/get_current_time.sh create mode 100755 tools/get_current_weather.sh create mode 100755 tools/get_web_page.sh delete mode 100644 tools/js/may_execute_js_code.js create mode 100755 tools/may_execute_command.sh create mode 100644 tools/may_execute_js_code.js create mode 100644 tools/may_execute_py_code.py create mode 100644 tools/may_execute_rb_code.rb delete mode 100644 tools/py/may_execute_py_code.py delete mode 100644 tools/rb/may_execute_rb_code.rb create mode 100755 tools/search_duckduckgo.sh create mode 100755 tools/search_wolframalpha.sh delete mode 100755 tools/sh/get_current_time.sh delete mode 100755 tools/sh/get_current_weather.sh delete mode 100755 tools/sh/get_web_page.sh delete mode 100755 tools/sh/may_execute_command.sh delete mode 100755 tools/sh/search_duckduckgo.sh delete mode 100755 tools/sh/search_wolframalpha.sh diff --git a/Argcfile.sh b/Argcfile.sh index 1031df8..09686b6 100644 --- a/Argcfile.sh +++ b/Argcfile.sh @@ -46,7 +46,7 @@ build-bin() { for name in "${names[@]}"; do basename="${name%.*}" lang="${name##*.}" - func_file="tools/$lang/$name" + func_file="tools/$name" if [[ -f "$func_file" ]]; then if _is_win; then bin_file="$BIN_DIR/$basename.cmd" @@ -85,7 +85,7 @@ build-declarations-json() { build_failed_funcs=() for name in "${names[@]}"; do lang="${name##*.}" - func_file="tools/$lang/$name" + func_file="tools/$name" if [[ ! -f "$func_file" ]]; then not_found_funcs+=("$name") continue; @@ -242,7 +242,7 @@ _choice_func() { lang="${item%:*}" cmd="${item#*:}" if command -v "$cmd" &> /dev/null; then - ls -1 tools/$lang | grep "\.$lang$" + ls -1 tools | grep "\.$lang$" fi done } diff --git a/README.md b/README.md index 83c9df8..9bcb735 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ The project supports write functions in bash/js/python. ### Bash -Create a new bashscript in the [./tools/sh](./tools/sh/) directory (.e.g. `may_execute_command.sh`). +Create a new bashscript in the [./tools/](./tools/) directory (.e.g. `may_execute_command.sh`). ```sh #!/usr/bin/env bash @@ -109,7 +109,7 @@ The relationship between comment tags and parameters in function declarations is ### Javascript -Create a new javascript in the [./tools/js](./tools/js/) directory (.e.g. `may_execute_command.js`). +Create a new javascript in the [./tools/](./tools/) directory (.e.g. `may_execute_command.js`). ```js exports.declarate = function declarate() { @@ -139,7 +139,7 @@ exports.execute = function execute(data) { ### Python -Create a new python script in the [./tools/py](./tools/py/) directory (e.g., `may_execute_py_code.py`). +Create a new python script in the [./tools/](./tools/) directory (e.g., `may_execute_py_code.py`). ```py def declarate(): @@ -167,7 +167,7 @@ def execute(data): ### Ruby -Create a new ruby script in the [./tools/rb](./tools/rb/) directory (e.g., `may_execute_rb_code.rb`). +Create a new ruby script in the [./tools/](./tools/) directory (e.g., `may_execute_rb_code.rb`). ```rb def declarate diff --git a/run/tool.js b/run/tool.js index de97423..ad7c151 100755 --- a/run/tool.js +++ b/run/tool.js @@ -22,7 +22,7 @@ function parseArgv() { } function loadFunc(func_file) { - const func_path = path.resolve(__dirname, `../tools/js/${func_file}`) + const func_path = path.resolve(__dirname, `../tools/${func_file}`) try { return require(func_path); } catch { diff --git a/run/tool.py b/run/tool.py index 0555363..99163d3 100755 --- a/run/tool.py +++ b/run/tool.py @@ -23,7 +23,7 @@ def parse_argv(): def load_func(func_file): base_dir = os.path.dirname(os.path.abspath(__file__)) - func_path = os.path.join(base_dir, f"../tools/py/{func_file}") + func_path = os.path.join(base_dir, f"../tools/{func_file}") if os.path.exists(func_path): spec = importlib.util.spec_from_file_location(func_file, func_path) module = importlib.util.module_from_spec(spec) diff --git a/run/tool.rb b/run/tool.rb index 4a692ef..cf51f3f 100755 --- a/run/tool.rb +++ b/run/tool.rb @@ -21,7 +21,7 @@ def parse_argv end def load_func(func_file) - func_path = File.expand_path("../tools/rb/#{func_file}", __dir__) + func_path = File.expand_path("../tools/#{func_file}", __dir__) begin require func_path diff --git a/run/tool.sh b/run/tool.sh index da9e412..4846c8e 100755 --- a/run/tool.sh +++ b/run/tool.sh @@ -13,7 +13,7 @@ if [[ "$FUNC_FILE" != *'.sh' ]]; then fi PROJECT_DIR="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)" -FUNC_FILE="$PROJECT_DIR/tools/sh/$FUNC_FILE" +FUNC_FILE="$PROJECT_DIR/tools/$FUNC_FILE" if [[ "$OS" == "Windows_NT" ]]; then FUNC_FILE="$(cygpath -w "$FUNC_FILE")" diff --git a/tools/get_current_time.sh b/tools/get_current_time.sh new file mode 100755 index 0000000..26a25d8 --- /dev/null +++ b/tools/get_current_time.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +# @describe Get the current time. + +main() { + date +} + +eval "$(argc --argc-eval "$0" "$@")" + diff --git a/tools/get_current_weather.sh b/tools/get_current_weather.sh new file mode 100755 index 0000000..47102e0 --- /dev/null +++ b/tools/get_current_weather.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +# @describe Get the current weather in a given location. +# @option --location! The city and optionally the state or country, e.g., "London", "San Francisco, CA". + +main() { + curl -fsSL "https://wttr.in/$(echo "$argc_location" | sed 's/ /+/g')?format=4&M" +} + +eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/get_web_page.sh b/tools/get_web_page.sh new file mode 100755 index 0000000..65e6d2a --- /dev/null +++ b/tools/get_web_page.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -e + +# @describe Fetches the HTML content from a specified webpage URL and converts it to Markdown format. +# Use it to answer user questions that require up-to-date content from web pages. +# @meta require-tools curl,pandoc,sed +# @option --url! The URL to scrape. + +main() { + # span and div tags are dropped from the HTML https://pandoc.org/MANUAL.html#raw-htmltex and sed removes any inline SVG images in image tags from the Markdown content. + curl -fsSL "$argc_url" | pandoc -f html-native_divs-native_spans -t gfm-raw_html | sed -E 's/!\[.*?\]\((data:image\/svg\+xml[^)]+)\)//g' +} + +eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/js/may_execute_js_code.js b/tools/js/may_execute_js_code.js deleted file mode 100644 index 9575582..0000000 --- a/tools/js/may_execute_js_code.js +++ /dev/null @@ -1,22 +0,0 @@ -exports.declarate = function declarate() { - return { - "name": "may_execute_js_code", - "description": "Runs the javascript code in node.js.", - "parameters": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Javascript code to execute, such as `console.log(\"hello world\")`" - } - }, - "required": [ - "code" - ] - } - } -} - -exports.execute = function execute(data) { - eval(data.code) -} diff --git a/tools/may_execute_command.sh b/tools/may_execute_command.sh new file mode 100755 index 0000000..5aad4a3 --- /dev/null +++ b/tools/may_execute_command.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +# @describe Executes a shell command. +# @option --command! Command to execute, such as `ls -la` + +main() { + eval "$argc_command" +} + +eval "$(argc --argc-eval "$0" "$@")" \ No newline at end of file diff --git a/tools/may_execute_js_code.js b/tools/may_execute_js_code.js new file mode 100644 index 0000000..9575582 --- /dev/null +++ b/tools/may_execute_js_code.js @@ -0,0 +1,22 @@ +exports.declarate = function declarate() { + return { + "name": "may_execute_js_code", + "description": "Runs the javascript code in node.js.", + "parameters": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Javascript code to execute, such as `console.log(\"hello world\")`" + } + }, + "required": [ + "code" + ] + } + } +} + +exports.execute = function execute(data) { + eval(data.code) +} diff --git a/tools/may_execute_py_code.py b/tools/may_execute_py_code.py new file mode 100644 index 0000000..01a59b9 --- /dev/null +++ b/tools/may_execute_py_code.py @@ -0,0 +1,21 @@ +def declarate(): + return { + "name": "may_execute_py_code", + "description": "Runs the python code.", + "parameters": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Python code to execute, such as `print(\"hello world\")`" + } + }, + "required": [ + "code" + ] + } + } + + +def execute(data): + exec(data["code"]) diff --git a/tools/may_execute_rb_code.rb b/tools/may_execute_rb_code.rb new file mode 100644 index 0000000..a1f9821 --- /dev/null +++ b/tools/may_execute_rb_code.rb @@ -0,0 +1,22 @@ +def declarate + { + "name": "may_execute_rb_code", + "description": "Runs the ruby code.", + "parameters": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Ruby code to execute, such as `puts \"hello world\"`" + } + }, + "required": [ + "code" + ] + } + } +end + +def execute(data) + eval(data["code"]) +end diff --git a/tools/py/may_execute_py_code.py b/tools/py/may_execute_py_code.py deleted file mode 100644 index 01a59b9..0000000 --- a/tools/py/may_execute_py_code.py +++ /dev/null @@ -1,21 +0,0 @@ -def declarate(): - return { - "name": "may_execute_py_code", - "description": "Runs the python code.", - "parameters": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Python code to execute, such as `print(\"hello world\")`" - } - }, - "required": [ - "code" - ] - } - } - - -def execute(data): - exec(data["code"]) diff --git a/tools/rb/may_execute_rb_code.rb b/tools/rb/may_execute_rb_code.rb deleted file mode 100644 index a1f9821..0000000 --- a/tools/rb/may_execute_rb_code.rb +++ /dev/null @@ -1,22 +0,0 @@ -def declarate - { - "name": "may_execute_rb_code", - "description": "Runs the ruby code.", - "parameters": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Ruby code to execute, such as `puts \"hello world\"`" - } - }, - "required": [ - "code" - ] - } - } -end - -def execute(data) - eval(data["code"]) -end diff --git a/tools/search_duckduckgo.sh b/tools/search_duckduckgo.sh new file mode 100755 index 0000000..c5ab565 --- /dev/null +++ b/tools/search_duckduckgo.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +# @describe Takes in a query string and returns search result from DuckDuckGo. +# 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. + +main() { + ddgr -n $DDG_MAX_RESULTS --json "$argc_query" +} + +eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/search_wolframalpha.sh b/tools/search_wolframalpha.sh new file mode 100755 index 0000000..a2dfdc7 --- /dev/null +++ b/tools/search_wolframalpha.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -e + +# @describe Get an answer to a question using Wolfram Alpha. Input should the query in English. +# Use it to answer user questions that require computation, detailed facts, data analysis, or complex queries. +# This ensures accurate and precise answers. + +# @option --query! The query to search for. +# @env WOLFRAM_API_ID! + +main() { + local curl_args=( + -sSf -G + --data-urlencode "output=JSON" + --data-urlencode "format=plaintext" + --data-urlencode "input=$argc_query" + --data-urlencode "appid=$WOLFRAM_API_ID" + "https://api.wolframalpha.com/v2/query" + ) + curl "${curl_args[@]}" | \ + jq -r '.queryresult.pods[] | select(.subpods[0].plaintext != "")' +} + +eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/sh/get_current_time.sh b/tools/sh/get_current_time.sh deleted file mode 100755 index 26a25d8..0000000 --- a/tools/sh/get_current_time.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Get the current time. - -main() { - date -} - -eval "$(argc --argc-eval "$0" "$@")" - diff --git a/tools/sh/get_current_weather.sh b/tools/sh/get_current_weather.sh deleted file mode 100755 index 47102e0..0000000 --- a/tools/sh/get_current_weather.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Get the current weather in a given location. -# @option --location! The city and optionally the state or country, e.g., "London", "San Francisco, CA". - -main() { - curl -fsSL "https://wttr.in/$(echo "$argc_location" | sed 's/ /+/g')?format=4&M" -} - -eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/sh/get_web_page.sh b/tools/sh/get_web_page.sh deleted file mode 100755 index 65e6d2a..0000000 --- a/tools/sh/get_web_page.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Fetches the HTML content from a specified webpage URL and converts it to Markdown format. -# Use it to answer user questions that require up-to-date content from web pages. -# @meta require-tools curl,pandoc,sed -# @option --url! The URL to scrape. - -main() { - # span and div tags are dropped from the HTML https://pandoc.org/MANUAL.html#raw-htmltex and sed removes any inline SVG images in image tags from the Markdown content. - curl -fsSL "$argc_url" | pandoc -f html-native_divs-native_spans -t gfm-raw_html | sed -E 's/!\[.*?\]\((data:image\/svg\+xml[^)]+)\)//g' -} - -eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/sh/may_execute_command.sh b/tools/sh/may_execute_command.sh deleted file mode 100755 index 5aad4a3..0000000 --- a/tools/sh/may_execute_command.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Executes a shell command. -# @option --command! Command to execute, such as `ls -la` - -main() { - eval "$argc_command" -} - -eval "$(argc --argc-eval "$0" "$@")" \ No newline at end of file diff --git a/tools/sh/search_duckduckgo.sh b/tools/sh/search_duckduckgo.sh deleted file mode 100755 index c5ab565..0000000 --- a/tools/sh/search_duckduckgo.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Takes in a query string and returns search result from DuckDuckGo. -# 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. - -main() { - ddgr -n $DDG_MAX_RESULTS --json "$argc_query" -} - -eval "$(argc --argc-eval "$0" "$@")" diff --git a/tools/sh/search_wolframalpha.sh b/tools/sh/search_wolframalpha.sh deleted file mode 100755 index a2dfdc7..0000000 --- a/tools/sh/search_wolframalpha.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -set -e - -# @describe Get an answer to a question using Wolfram Alpha. Input should the query in English. -# Use it to answer user questions that require computation, detailed facts, data analysis, or complex queries. -# This ensures accurate and precise answers. - -# @option --query! The query to search for. -# @env WOLFRAM_API_ID! - -main() { - local curl_args=( - -sSf -G - --data-urlencode "output=JSON" - --data-urlencode "format=plaintext" - --data-urlencode "input=$argc_query" - --data-urlencode "appid=$WOLFRAM_API_ID" - "https://api.wolframalpha.com/v2/query" - ) - curl "${curl_args[@]}" | \ - jq -r '.queryresult.pods[] | select(.subpods[0].plaintext != "")' -} - -eval "$(argc --argc-eval "$0" "$@")" -- cgit v1.2.3