mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-27 04:43:11 +00:00
fix(kbtree): 修客户端脚本三处实测暴露的缺陷
都是本机装好后逐条跑命令发现的,不是设想: 1. **token 找不到**:脚本找 `scripts/../config.json`,而实际文件在 `<skill>/config/config.json`。症状极具迷惑性——「明明配了 token 却说 没找到」。改为两种布局都试,并在注释里写明为什么不能只写一种。 2. **`-h` 也要 token**:帮助段排在 token 检查之后,`kb_tree.sh -h` 会被 拦下报「未找到访问令牌」。把 help 提到最前。 3. **`-q` 被当成命令名**:`kb_tree.sh -q 并发`(不给子命令)报 「未知命令: -q」,而这是很自然的写法。改为:第一个参数是选项时不取作 子命令,解析完选项后再定——有 -q 走 search,没有走 tree。 另外把 curl -f 换成 -w + 自行判状态码:-f 在 4xx 时只吐一行 `curl: (22) 404`,把响应体丢掉,而 404 响应体里恰是「现有分类」清单, 是排查时最需要的。现在 401/404 都会给出可行动的中文提示, 退出码 0/2/3/4/5/7/8 各有语义。
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
# kb_tree.sh -q goroutine -c tech # 在 tech 子树内检索
|
||||
# kb_tree.sh -l # 列分类
|
||||
#
|
||||
# token 读取顺序:环境变量 KB_TOKEN > 本目录 config.json > 报错。
|
||||
# token 读取顺序:环境变量 KB_TOKEN > <skill>/config/config.json(或 <skill>/config.json)> 报错。
|
||||
# 故意不放命令行参数:token 会进 shell 历史与 ps 输出。
|
||||
set -euo pipefail
|
||||
|
||||
@ -35,10 +35,14 @@ done
|
||||
|
||||
|
||||
if [[ -z "${KB_TOKEN:-}" ]]; then
|
||||
CFG="$HERE/../config.json"
|
||||
if [[ -f "$CFG" ]]; then
|
||||
KB_TOKEN="$(python3 -c 'import json,sys;print(json.load(open(sys.argv[1])).get("token",""))' "$CFG" 2>/dev/null || true)"
|
||||
fi
|
||||
# 两种布局都试:<skill>/config/config.json(当前布局)与 <skill>/config.json。
|
||||
# 只写一种会因目录结构调整而静默失效——症状是「明明配了 token 却说没找到」。
|
||||
for CFG in "$HERE/../config/config.json" "$HERE/../config.json"; do
|
||||
if [[ -f "$CFG" ]]; then
|
||||
KB_TOKEN="$(python3 -c 'import json,sys;print(json.load(open(sys.argv[1])).get("token",""))' "$CFG" 2>/dev/null || true)"
|
||||
[[ -n "$KB_TOKEN" ]] && break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [[ -z "${KB_TOKEN:-}" ]]; then
|
||||
cat >&2 <<'EOF'
|
||||
@ -57,7 +61,14 @@ fi
|
||||
|
||||
auth=(-H "X-API-Key: ${KB_TOKEN}")
|
||||
|
||||
cmd="${1:-tree}"; shift || true
|
||||
# 第一个参数若是选项(如 -q x),它就是选项而非子命令。
|
||||
# 原先会把 "-q" 当命令名报「未知命令: -q」——而 `kb_tree.sh -q 并发` 是很自然的写法。
|
||||
if [[ $# -gt 0 && "$1" == -* ]]; then
|
||||
cmd=""
|
||||
else
|
||||
cmd="${1:-tree}"
|
||||
shift || true
|
||||
fi
|
||||
query=""; category=""; depth=""; items=""; limit=""
|
||||
while getopts "q:c:d:i:l:h" opt 2>/dev/null; do
|
||||
case "$opt" in
|
||||
@ -122,6 +133,11 @@ except Exception:
|
||||
esac
|
||||
}
|
||||
|
||||
# 命令在解析选项**之后**定:没显式给子命令时,
|
||||
# 有 -q 走 search、没有则走 tree。
|
||||
if [[ -z "$cmd" ]]; then
|
||||
if [[ -n "$query" ]]; then cmd="search"; else cmd="tree"; fi
|
||||
fi
|
||||
case "$cmd" in
|
||||
tree|categories|counts|search) ;;
|
||||
*) echo "未知命令: $cmd" >&2; exit 2 ;;
|
||||
|
||||
Reference in New Issue
Block a user