86 lines
4.0 KiB
YAML
86 lines
4.0 KiB
YAML
# ═══════════════════════════════════════════════
|
||
# 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
|
||
# 📜 Copyright: 国作登字-2026-A-00037559
|
||
# ═══════════════════════════════════════════════
|
||
# 🦅 天眼联邦签到接收
|
||
# 接收子仓库天眼人格体的心跳签到,校验身份,更新注册表
|
||
#
|
||
# 触发条件: repository_dispatch (skyeye-checkin event)
|
||
|
||
name: "🦅 天眼签到接收"
|
||
|
||
on:
|
||
repository_dispatch:
|
||
types: [skyeye-checkin]
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
jobs:
|
||
process-checkin:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: "🔍 校验签到身份"
|
||
env:
|
||
PAYLOAD: ${{ toJson(github.event.client_payload) }}
|
||
run: |
|
||
echo "🦅 天眼签到接收 · $(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S CST')"
|
||
|
||
DEV_ID=$(echo "$PAYLOAD" | jq -r '.dev_id')
|
||
PERSONA=$(echo "$PAYLOAD" | jq -r '.persona')
|
||
SIG_HASH=$(echo "$PAYLOAD" | jq -r '.signature_hash')
|
||
|
||
echo "📋 签到者: $DEV_ID ($PERSONA)"
|
||
echo "🔑 签名哈希: $SIG_HASH"
|
||
|
||
# 读取注册表中的联邦条目
|
||
REGISTERED_HASH=$(jq -r ".federation.\"$DEV_ID\".signature_hash" .github/persona-brain/agent-registry.json)
|
||
|
||
if [ "$REGISTERED_HASH" = "null" ]; then
|
||
echo "⚠️ 首次签到 · 注册表中签名为空,接受并记录初始签名"
|
||
elif [ "$REGISTERED_HASH" = "$SIG_HASH" ]; then
|
||
echo "✅ 身份校验通过(签名匹配)"
|
||
fi
|
||
|
||
if [ "$REGISTERED_HASH" = "null" ] || [ "$REGISTERED_HASH" = "$SIG_HASH" ]; then
|
||
# 更新签到记录
|
||
jq ".federation.\"$DEV_ID\".last_checkin = \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" | .federation.\"$DEV_ID\".signature_hash = \"$SIG_HASH\" | .federation.\"$DEV_ID\".status = \"active\"" \
|
||
.github/persona-brain/agent-registry.json > /tmp/registry.json
|
||
mv /tmp/registry.json .github/persona-brain/agent-registry.json
|
||
else
|
||
echo "🔴 签名不匹配!注册表: $REGISTERED_HASH vs 签到: $SIG_HASH"
|
||
echo "🚨 可能被篡改,标记异常"
|
||
jq ".federation.\"$DEV_ID\".status = \"signature_mismatch\" | .federation.\"$DEV_ID\".alert = \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"" \
|
||
.github/persona-brain/agent-registry.json > /tmp/registry.json
|
||
mv /tmp/registry.json .github/persona-brain/agent-registry.json
|
||
fi
|
||
|
||
# 同步更新 spoke-status
|
||
mkdir -p spoke-status
|
||
echo "$PAYLOAD" | jq '{dev_id: .dev_id, status: "checkin-ok", timestamp: .timestamp, persona: .persona, signature_hash: .signature_hash}' > "spoke-status/${DEV_ID}.json"
|
||
|
||
# 写入缓冲层(不直接写 grid-db)
|
||
TIMESTAMP=$(date -u +%Y-%m-%dT%H%M%SZ)
|
||
BUFFER_DIR="buffer/inbox/${DEV_ID}"
|
||
mkdir -p "$BUFFER_DIR"
|
||
CHECKIN_PAYLOAD=$(echo "$PAYLOAD" | jq '{persona: .persona, timestamp: .timestamp, signature_hash: .signature_hash, checks: .checks}')
|
||
jq -n \
|
||
--arg mid "BUF-${TIMESTAMP}-skyeye" \
|
||
--arg did "${DEV_ID}" \
|
||
--arg cat "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||
--argjson pl "$CHECKIN_PAYLOAD" \
|
||
'{message_id: $mid, dev_id: $did, source: "skyeye", type: "checkin", priority: "normal", payload: $pl, created_at: $cat, status: "pending"}' \
|
||
> "${BUFFER_DIR}/${TIMESTAMP}-checkin.json"
|
||
|
||
- name: "💾 提交签到记录"
|
||
run: |
|
||
git config user.name "铸渊 (ZhùYuān)"
|
||
git config user.email "zhuyuan@guanghulab.com"
|
||
git add -A
|
||
git diff --cached --quiet && echo "无变更" && exit 0
|
||
DEV_ID=$(echo '${{ toJson(github.event.client_payload) }}' | jq -r '.dev_id')
|
||
git commit -m "🦅 [skyeye-checkin] $DEV_ID 签到 → buffer [skip ci]"
|
||
git push origin main
|