From 066f9f959fb2e8502191dda15692898f01ef0286 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 8 Oct 2026 01:33:15 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20tea=20=E9=81=87=E5=88=B0=20TLS=20?= =?UTF-8?q?=E6=86=91=E8=AD=89=E9=8C=AF=E8=AA=A4=E6=99=82=E8=87=AA=E5=8B=95?= =?UTF-8?q?=E9=87=8D=E8=A9=A6=EF=BC=8C=E9=81=BF=E5=85=8D=E8=BC=AA=E8=A9=A2?= =?UTF-8?q?=E8=85=B3=E6=9C=AC=E4=B8=AD=E6=96=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- skills/herdr-issue/SKILL.md | 4 +++- skills/herdr-issue/scripts/lib.sh | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/skills/herdr-issue/SKILL.md b/skills/herdr-issue/SKILL.md index 5de5716..8b1790f 100644 --- a/skills/herdr-issue/SKILL.md +++ b/skills/herdr-issue/SKILL.md @@ -59,4 +59,6 @@ Gitea 一律以 tea 的預設 login(`tea login list` 中 default 為 true 的 | `tick.sh` | 子 agent | 勾議題內文第 k 個核取方塊 | | `pr-wait.sh` | 子 agent(背景) | 等 PR 衝突、關閉或合併 | -環境變數:`HERDR_ISSUE_INTERVAL`(pr-wait 輪詢秒數,預設 300)、`HERDR_ISSUE_WATCH_INTERVAL`(watch-issue 輪詢秒數,預設 5)、`HERDR_ISSUE_BLOCKED_AFTER`(blocked 多久才通知,預設 60 秒)、`HERDR_ISSUE_MODEL`(預設 `claude-opus-5-5`)。 +TLS/憑證錯誤:`lib.sh` 的 tea 包裝會自動重試(預設 5 次、間隔 3 秒),輪詢中的 `watch-issue.sh`、`pr-wait.sh` 因此不會被一次性的連線問題打斷;不會關閉憑證驗證。若憑證長期有問題,請修正伺服器或系統 CA,而不是略過驗證。 + +環境變數:`HERDR_ISSUE_TLS_RETRIES`(TLS 重試次數,預設 5)、`HERDR_ISSUE_INTERVAL`(pr-wait 輪詢秒數,預設 300)、`HERDR_ISSUE_WATCH_INTERVAL`(watch-issue 輪詢秒數,預設 5)、`HERDR_ISSUE_BLOCKED_AFTER`(blocked 多久才通知,預設 60 秒)、`HERDR_ISSUE_MODEL`(預設 `claude-opus-5-5`)。 diff --git a/skills/herdr-issue/scripts/lib.sh b/skills/herdr-issue/scripts/lib.sh index 8d00082..5b2ce15 100755 --- a/skills/herdr-issue/scripts/lib.sh +++ b/skills/herdr-issue/scripts/lib.sh @@ -19,7 +19,22 @@ print(next((l['name'] for l in json.load(sys.stdin) if str(l.get('default')).low fi [ -n "$HERDR_ISSUE_LOGIN" ] || { echo "herdr-issue: tea 沒有預設 login,請先 tea login default " >&2; exit 1; } export HERDR_ISSUE_LOGIN -tea() { command tea "$1" --login "$HERDR_ISSUE_LOGIN" "${@:2}"; } +# TLS/憑證錯誤多半是暫時的(連線被重置、代理、時鐘),遇到就重試幾次,不要讓輪詢中的腳本因此中斷; +# 其他錯誤原樣回傳。不關閉憑證驗證。重試次數 HERDR_ISSUE_TLS_RETRIES(預設 5),間隔 3 秒。 +tea() { + local out err rc=0 try max="${HERDR_ISSUE_TLS_RETRIES:-5}" ef; ef="$(mktemp)" + for ((try = 1; try <= max; try++)); do + out="$(command tea "$1" --login "$HERDR_ISSUE_LOGIN" "${@:2}" 2>"$ef")" && rc=0 || rc=$? + err="$(cat "$ef")" + if ! grep -qiE 'tls|x509|certificate|handshake' <<<"$out$err"; then break; fi + echo "herdr-issue: tea 遇到 TLS/憑證錯誤(第 $try/$max 次),3 秒後重試" >&2 + rc=${rc/#0/1}; sleep 3 + done + rm -f "$ef" + [ -z "$err" ] || printf '%s\n' "$err" >&2 + printf '%s\n' "$out" + return "$rc" +} # 從 stdin 讀 JSON,執行 python 片段,d 是解析後的物件。 jq_py() { python3 -c "import sys,json