ISEP 0.1.0:環境設定收成一個 plugin,本機與雲端共用一份

leo 2026-08-20:「同一個 plugin 你用,薄殼也用,保證兩邊同步」
              「我要你幫雲端做薄殼,永遠都有問題,你要做的就是這組設定
                你自己可以 dogfooding」

搬進來:41 支 hook(51 條註冊)/7 支 command/2 支 skill/23 支腳本。
不搬 .env、wiki、docs——那些是知識不是環境。

51 條 hook 路徑全部從 $CLAUDE_PROJECT_DIR/.claude/hooks/ 改成 ${CLAUDE_PLUGIN_ROOT}/hooks/,
零漏網。那正是薄殼一直壞掉的根:雲端 cwd 不是真身,寫死路徑就斷。

尚未驗證:Claude Code 能不能從私有 Gitea repo 裝 marketplace(要憑證)。
下一步就是在本機實際裝一次,通了才動雲端 bootstrap.sh。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 11:41:46 +08:00
commit c2638668e3
85 changed files with 11879 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
#!/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