#!/bin/bash # gitea-arm-status.sh — 列出目前還「活著」的 ARM 待核請求(純讀、不打網路、不消耗任何東西) # # 🔴 為什麼存在(2026-08-13 實撞): # 總管在測試 gitea-arm 機制時,為了重置測試狀態隨手 `rm -rf .claude/gitea-arm`, # 把剛請 leo 處理的那筆真請求也一起清掉了——leo 差點拿一組已經失效的代碼去回覆。 # **叫人做事然後把前提刪掉,浪費的是他的注意力**,而那正是這整套系統最該省的東西。 # # ⇒ 規約:**發出請求後,不准動該請求的狀態檔** # (不 `rm -rf .claude/gitea-arm/`、不手動刪 `pending/*.json`、不改內容)。 # 讓它自然被 `scripts/gitea-arm-check.sh` 消耗,或自然過期。 # 真的要清「已知作廢」的單一 nonce,也只刪那一個檔,不要整個目錄清空。 # # ⇒ 這支的存在本身就是防呆:**清東西前先看看有沒有還活著的請求**, # 別在不知道自己清了什麼的狀態下動那個目錄。 set -uo pipefail SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" # shellcheck source=lib/gitea-arm-common.sh . "$SCRIPT_DIR/lib/gitea-arm-common.sh" STATE_DIR=$(gitea_arm_state_dir) PENDING_DIR="$STATE_DIR/pending" NOW=$(date +%s) shopt -s nullglob PENDING_FILES=("$PENDING_DIR"/*.json) shopt -u nullglob if [ "${#PENDING_FILES[@]}" -eq 0 ]; then echo "(沒有待核請求,這個目錄現在動它是安全的)" exit 0 fi echo "🔴 下面這些請求還活著——動 .claude/gitea-arm/ 之前先看這份清單:" echo "" for PF in "${PENDING_FILES[@]}"; do NONCE=$(jq -r '.nonce // "?"' "$PF" 2>/dev/null) MISSION=$(jq -r '.mission // "?"' "$PF" 2>/dev/null) ISSUE=$(jq -r '.issue // "?"' "$PF" 2>/dev/null) EXPIRES_AT=$(jq -r '.expires_at // 0' "$PF" 2>/dev/null) case "$EXPIRES_AT" in ''|*[!0-9]*) EXPIRES_AT=0;; esac EXPIRES_HUMAN=$(date -r "$EXPIRES_AT" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date -d "@$EXPIRES_AT" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "?") if [ "$NOW" -ge "$EXPIRES_AT" ]; then STATUS="⌛ 已過期(下次 check 會自動清掉,不必手動動它)" else STATUS="⏳ 還在等 Leo 回覆($EXPIRES_HUMAN 前有效)" fi echo " $NONCE(#$ISSUE)— $MISSION" echo " $STATUS" done