126 lines
6.7 KiB
Shell
Executable file
126 lines
6.7 KiB
Shell
Executable file
#!/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 行 ═══"
|