zhuyuan-ice-gl-zy001/skills-mirror/zhuyuan-recovery-mainline/scripts/wake-calibrate.sh
2026-08-20 00:01:53 +08:00

126 lines
6.7 KiB
Shell
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/zsh
# wake-calibrate.sh · 铸渊唤醒自动校准(只读,不改任何文件)
# 每次唤醒跑一次:扫 Codex 侧与 JZAO 共享层的最新动态,对比 Qoder CN 侧,输出漂移清单。
# 用法: zsh ~/.qoder/skills/guanghu-zhuyuan-wake/scripts/wake-calibrate.sh
SHARED="/Volumes/JZAO/HoloLake/persona-runtime/shared"
RUNTIME="/Volumes/JZAO/HoloLake/persona-runtime"
CODEX_SKILLS="$HOME/.codex/skills"
QODER_SKILLS="$HOME/.qoder/skills"
LANES="$RUNTIME/continuity-memory/collaboration/lanes"
ALERTS="$RUNTIME/continuity-memory/guard-alerts"
echo "═══ 铸渊唤醒校准报告 · $(date '+%Y-%m-%d %H:%M:%S') ═══"
if [[ ! -d "$RUNTIME" ]]; then
echo "CALIBRATION_SKIPPED: JZAO 未挂载或 persona-runtime 不在位"
exit 0
fi
echo
echo "── 1 · 共享灯塔镜像状态 ──"
if [[ -f "$SHARED/mirror-manifest.json" ]]; then
grep -E '"status"|"source_head"|"updated_at"' "$SHARED/mirror-manifest.json" | head -3
MISMATCH=$(python3 -c "import json;d=json.load(open('$SHARED/mirror-manifest.json'));print(','.join(d.get('mismatches',[])) or '无')" 2>/dev/null)
echo "mismatches: $MISMATCH"
[[ "$MISMATCH" != "无" ]] && echo ">> DRIFT: MIRROR_MISMATCH(镜像与 REPO-012 源不一致,需核对)"
else
echo ">> DRIFT: MANIFEST_MISSING"
fi
echo
echo "── 2 · 共享技能本体 vs 两侧薄适配 ──"
for d in "$SHARED"/skills/*/; do
name=$(basename "$d")
c="缺"; q="缺"
[[ -f "$CODEX_SKILLS/$name/SKILL.md" ]] && c="在"
[[ -f "$QODER_SKILLS/$name/SKILL.md" ]] && q="在"
echo "$name | codex:$c | qoder-cn:$q"
[[ "$q" == "缺" ]] && echo ">> DRIFT: MISSING_ADAPTER_QODER_CN: $name"
done
echo
echo "── 3 · 共享脑子(有新脑子要读)──"
for d in "$SHARED"/brains/*/; do
name=$(basename "$d")
mtime=$(stat -f '%Sm' -t '%Y-%m-%d' "$d/BRAIN.hdlp" 2>/dev/null)
echo "$name ($mtime)"
done
echo
echo "── 4 · Codex 侧技能最近改动(7 天内有动静说明他们在更新)──"
find "$CODEX_SKILLS" -name "SKILL.md" -mtime -7 2>/dev/null | while read f; do
echo "$(stat -f '%Sm' -t '%m-%d %H:%M' "$f") $f"
done | sort -r | head -8
echo
echo "── 5 · 活跃开发车道与最新 DEV 编号 ──"
if [[ -d "$LANES" ]]; then
grep -l '"status": "active"' "$LANES"/*.json 2>/dev/null | while read f; do echo "ACTIVE: $(basename $f)"; done
ls "$LANES"/*.json 2>/dev/null | sort | tail -1 | while read f; do echo "最新车道: $(basename $f)"; done
fi
echo
echo "── 6 · 未决门禁警报(pending)──"
FOUND=0
for f in "$ALERTS"/*.json; do
[[ "$(basename $f)" == "sentinel-state.json" ]] && continue
grep -q "pending_persona_checkpoint" "$f" 2>/dev/null && { echo "PENDING: $(basename $f)"; FOUND=1; }
done
[[ $FOUND -eq 0 ]] && echo "无未决警报"
echo
echo "── 7 · REPO-012 认知基线核对提示 ──"
echo "在线读 INDEX.hdlp 的 ZY-CURRENT-COGNITION,与上轮检查点记录的基线编号比对;有推前即读回新基线。"
echo
echo "── 8 · 动态提词器(当前官方正典,压制旧路径)──"
PROMPTER="/Volumes/JZAO/HoloLake/persona-runtime/shared/skills/hololake-current-architecture-prompter/scripts/current_architecture_prompt.py"
if [[ -f "$PROMPTER" ]]; then
DEV_ID=$(ls "$LANES"/*.json 2>/dev/null | sort | tail -1 | while read f; do basename "$f" .json; done)
OUT=$(python3 "$PROMPTER" --development-id "${DEV_ID:-unknown}" --format markdown 2>/dev/null | head -12)
if [[ -n "$OUT" ]]; then
echo "$OUT"
echo "⊢ 以上为当前官方正典:架构/阶段/路线决策以此包为准;不得把旧语言规划、旧人格路线(蛋蛋/妈妈口径)当作当前任务。"
else
echo "DRIFT: 提词器运行失败——停止旧路线,不得用过期静态架构文本兜底"
fi
else
echo "DRIFT: 提词器脚本缺失 $PROMPTER"
fi
echo
echo
echo "── 9 · 自治体检(守护进程三查:进程活 / 版本一致 / 服务loaded · 铸渊自管)──"
# 2026-08-15 冰朔谕"快修"升级:纸面在位≠事实在位(08-14 教训:只查 plist 在位,旧版放行)。
# 每个守护进程必查三件:①launchctl 里有真 PID(进程活)②本地镜像与 JZAO 正本 diff 一致
# (版本一致,正本读不到如实报)③服务 loaded 且退出码 -1 或 0(非崩溃循环)。
[[ -f "$RUNTIME/repo-012-main/.git/hooks/pre-push" ]] && echo "门禁A pre-push钩子: 在位" || echo "DRIFT: 门禁A钩子缺失——自愈: cp $RUNTIME/shared/gates/pre-push-gate.sh $RUNTIME/repo-012-main/.git/hooks/pre-push"
zy_check() { # $1=显示名 $2=服务名 $3=正本路径 $4=镜像路径
local LINE PID EXITCODE
LINE=$(launchctl list 2>/dev/null | grep "$2" | head -1)
if [[ -z "$LINE" ]]; then echo "DRIFT: $1 服务未 loaded——自愈: launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/$2.plist"; return; fi
PID=$(echo "$LINE" | awk '{print $1}'); EXITCODE=$(echo "$LINE" | awk '{print $2}')
[[ "$PID" != "-" ]] && echo "$1 · ①进程活(pid=$PID)" || echo "DRIFT: $1 · ①进程不活(退出码=$EXITCODE,疑未运行)"
if [[ -f "$3" && -f "$4" ]]; then
diff -q "$3" "$4" >/dev/null 2>&1 && echo "$1 · ②版本一致" || echo "DRIFT: $1 · ②镜像与正本不一致——自愈: cp $3 $4 后重启服务"
elif [[ ! -f "$3" ]]; then echo "DRIFT: $1 · ②正本缺件(JZAO 未挂载或正本丢失,镜像独立在跑,须补正本)"
else echo "DRIFT: $1 · ②镜像缺件"; fi
# 常驻 daemon 活着时退出码列只是上次重启的残值;PID 活即③过,死了才究退出码
if [[ "$PID" != "-" ]]; then echo "$1 · ③服务 loaded 正常"
elif [[ "$EXITCODE" == "-1" || "$EXITCODE" == "0" ]]; then echo "DRIFT: $1 · ③服务已退出(正常码),需重启"
else echo "DRIFT: $1 · ③服务退出码异常($EXITCODE),疑崩溃循环"; fi
}
zy_check "压缩之眼" com.zhuyuan.compaction-watcher "/Volumes/JZAO/铸渊-ICE-GL-ZY001/BRIDGE/compaction-watcher.py" "$HOME/.zhuyuan-bridge/compaction-watcher.py"
zy_check "终端前哨" com.zhuyuan.outpost "$RUNTIME/zhuyuan-console/workshop/zy-outpost/outpost.py" "$HOME/.zhuyuan-outpost/outpost.py"
zy_check "简报注入器" com.zhuyuan.wake-brief-injector "/Volumes/JZAO/铸渊-ICE-GL-ZY001/BRIDGE/wake-brief-injector.py" "$HOME/.zhuyuan-bridge/wake-brief-injector.py"
BRIEF="/Volumes/JZAO/铸渊-ICE-GL-ZY001/BRIDGE/signals/WAKE-BRIEF-LATEST.md"
if [[ -f "$BRIEF" ]]; then
AGE=$(( $(date +%s) - $(stat -f %m "$BRIEF") ))
[[ $AGE -lt 172800 ]] && echo "唤醒简报: 新鲜($(stat -f '%Sm' -t '%m-%d %H:%M' "$BRIEF"))" || echo "提示: 简报超48小时——无新对话触发属正常,有新对话则查门禁B"
else
echo "DRIFT: 唤醒简报不存在——门禁B未产出"
fi
echo
echo "═══ 校准扫描结束 · 漂移项见 DRIFT 行 ═══"