From 8220027298efda656b5ff5e039104bbab0351fba Mon Sep 17 00:00:00 2001 From: OG T Date: Sun, 5 Apr 2026 14:47:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(telegram+cd):=20=E5=85=A9=E5=80=8B=E9=A1=AF?= =?UTF-8?q?=E7=A4=BA=20bug=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Nemotron args 顯示 Python dict 字串問題 - restart_deployment: {'deployment_name': 'awoo'} → restart_deployment: deployment_name=awoooi-api - 改用 key=value 格式化,不再使用 str(dict)[:25] 2. CD 通知 ${MINUTES}/${SECONDS} 等變數未展開 - TG_MSG 從 env: 移到 run: shell 中組裝 - env: 中的 shell 變數在 bash 執行前是靜態字串,無法展開 Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/cd.yaml | 3 ++- apps/api/src/services/telegram_gateway.py | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 83af3312..49dfd9b8 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -413,12 +413,13 @@ jobs: SMOKE_RESULT: ${{ steps.smoke.outcome == 'success' && '✅' || '⚠️' }} ALERT_CHAIN_RESULT: ${{ steps.alert_chain_smoke.outcome == 'success' && '✅' || '⚠️' }} MONITORING_RESULT: ${{ steps.monitoring_coverage.outcome == 'success' && '✅' || '⚠️' }} - TG_MSG: "✅ AWOOOI 部署完成\n├ 📝 ${{ steps.commit.outputs.message }}\n├ 🔖 ${{ steps.commit.outputs.short_sha }}\n├ ⏱️ 耗時: ${MINUTES}m ${SECONDS}s\n├ 📦 API: ✅ Web: ✅\n├ 🩺 Health: ✅\n├ 🔗 Alert Chain: ${ALERT_CHAIN_RESULT}\n├ 📊 Monitoring: ${MONITORING_RESULT}\n└ 🎭 Smoke: ${SMOKE_RESULT}" run: | END_TIME=$(date +%s) DURATION=$((END_TIME - ${{ steps.commit.outputs.start_time }})) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) + # 2026-04-05 ogt: TG_MSG 必須在 shell 中組裝,才能展開 ${MINUTES}/${SECONDS} 等 shell 變數 + TG_MSG="✅ AWOOOI 部署完成\n├ 📝 ${{ steps.commit.outputs.message }}\n├ 🔖 ${{ steps.commit.outputs.short_sha }}\n├ ⏱️ 耗時: ${MINUTES}m ${SECONDS}s\n├ 📦 API: ✅ Web: ✅\n├ 🩺 Health: ✅\n├ 🔗 Alert Chain: ${ALERT_CHAIN_RESULT}\n├ 📊 Monitoring: ${MONITORING_RESULT}\n└ 🎭 Smoke: ${SMOKE_RESULT}" printf '%b' "$TG_MSG" | curl -fS -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \ -d "chat_id=${{ secrets.TELEGRAM_CHAT_ID }}" \ -d "parse_mode=HTML" \ diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py index 4a57badf..5c82fef9 100644 --- a/apps/api/src/services/telegram_gateway.py +++ b/apps/api/src/services/telegram_gateway.py @@ -382,8 +382,13 @@ class TelegramMessage: for t in self.nemotron_tools[:3]: # 最多顯示 3 個 valid_emoji = "✅" if t.get("valid", False) else "❌" tool_name = html.escape(str(t.get("tool", "unknown"))[:20]) - args_str = str(t.get("args", {}))[:25] - safe_args = html.escape(args_str) + # 2026-04-05 ogt: 格式化 args 為可讀的 key=value,而非 Python dict 字串 + args = t.get("args", {}) + if isinstance(args, dict) and args: + args_str = ", ".join(f"{k}={v}" for k, v in list(args.items())[:2]) + else: + args_str = str(args)[:30] + safe_args = html.escape(args_str[:40]) tools_lines.append(f" {valid_emoji} {tool_name}: {safe_args}") tools_str = "\n".join(tools_lines)