aboutsummaryrefslogtreecommitdiffstats
path: root/run/tool.sh
diff options
context:
space:
mode:
Diffstat (limited to 'run/tool.sh')
-rwxr-xr-xrun/tool.sh91
1 files changed, 91 insertions, 0 deletions
diff --git a/run/tool.sh b/run/tool.sh
new file mode 100755
index 0000000..da9e412
--- /dev/null
+++ b/run/tool.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+set -e
+
+if [[ "$0" == *tool.sh ]]; then
+ FUNC_FILE="$1"
+ FUNC_DATA="$2"
+else
+ FUNC_FILE="$(basename "$0")"
+ FUNC_DATA="$1"
+fi
+if [[ "$FUNC_FILE" != *'.sh' ]]; then
+ FUNC_FILE="$FUNC_FILE.sh"
+fi
+
+PROJECT_DIR="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)"
+FUNC_FILE="$PROJECT_DIR/tools/sh/$FUNC_FILE"
+
+if [[ "$OS" == "Windows_NT" ]]; then
+ FUNC_FILE="$(cygpath -w "$FUNC_FILE")"
+fi
+
+if [[ "$LLM_FUNCTION_ACTION" == "declarate" ]]; then
+ argc --argc-export "$FUNC_FILE" | \
+ jq -r '
+ def parse_description(flag_option):
+ if flag_option.describe == "" then
+ {}
+ else
+ { "description": flag_option.describe }
+ end;
+
+ def parse_enum(flag_option):
+ if flag_option.choice.type == "Values" then
+ { "enum": flag_option.choice.data }
+ else
+ {}
+ end;
+
+ def parse_property(flag_option):
+ [
+ { condition: (flag_option.flag == true), result: { type: "boolean" } },
+ { condition: (flag_option.multiple_occurs == true), result: { type: "array", items: { type: "string" } } },
+ { condition: (flag_option.notations[0] == "INT"), result: { type: "integer" } },
+ { condition: (flag_option.notations[0] == "NUM"), result: { type: "number" } },
+ { condition: true, result: { type: "string" } } ]
+ | map(select(.condition) | .result) | first
+ | (. + parse_description(flag_option))
+ | (. + parse_enum(flag_option))
+ ;
+
+
+ def parse_parameter(flag_options):
+ {
+ type: "object",
+ properties: (reduce flag_options[] as $item ({}; . + { ($item.id | sub("-"; "_"; "g")): parse_property($item) })),
+ required: [flag_options[] | select(.required == true) | .id],
+ };
+
+ {
+ name: (.name | sub("-"; "_"; "g")),
+ description: .describe,
+ parameters: parse_parameter([.flag_options[] | select(.id != "help" and .id != "version")])
+ }'
+else
+ if [[ -z "$FUNC_DATA" ]]; then
+ echo "No json data"
+ exit 1
+ fi
+
+ data="$(
+ echo "$FUNC_DATA" | \
+ jq -r '
+ to_entries | .[] |
+ (.key | split("_") | join("-")) as $key |
+ if .value | type == "array" then
+ .value | .[] | "--\($key)\n\(.)"
+ elif .value | type == "boolean" then
+ if .value then "--\($key)" else "" end
+ else
+ "--\($key)\n\(.value)"
+ end' | \
+ tr -d '\r'
+ )" || {
+ echo "Invalid json data"
+ exit 1
+ }
+ while IFS= read -r line; do
+ ARGS+=("$line")
+ done <<< "$data"
+ "$FUNC_FILE" "${ARGS[@]}"
+fi \ No newline at end of file