#!/bin/bash # 在 dsh.service 离线窗口内修 v3 会话里缺 id/role 的 user/message,并用生产读路径验收。 # # 背景:v0 的 spliced 修复让老线索重新可读;dsh 一旦 resume,就会把 v0 迁移成 v3 # 并按**当时的**写入路径继续追加。当时桥的 userMessage() 不产出 id,于是新注入的 # 那条 user/message 落成 {content, source},使整个 v3 在 # JsonlSessionPersistence.open() 的严格校验下读不出来。 # 桥侧已修(本仓 2026-09-19),此处只做一次性数据修复。 set -uo pipefail cd /home/program/agentmail STAMP=$(date +%Y%m%d-%H%M%S) LOG=".tmp/repair-v3-$STAMP.log" exec > >(tee "$LOG") 2>&1 echo "### BEGIN $(date -Is)" echo "### 执行者 cgroup: $(cat /proc/self/cgroup)" echo "### dsh 处理前: $(systemctl is-active dsh.service)" echo; echo "### [1/5] 停 dsh.service" systemctl stop dsh.service sleep 3 echo "dsh: $(systemctl is-active dsh.service)" echo; echo "### [2/5] 修复前:生产真读路径基线(v3 会话)" node scripts/verify-mail-sessions-readable.mjs --root /root/.dsh/sessions --only mail- 2>&1 | grep -E "READ (OK|FAIL) .*(f8f9a840|d042cc4c)" || true echo; echo "### [3/5] --apply 写盘" node scripts/repair-v3-usermessage-ids.mjs --apply 2>&1 | tail -12 echo; echo "### [4/5] 修复后:生产真读路径验收" node scripts/verify-mail-sessions-readable.mjs --root /root/.dsh/sessions --only mail- 2>&1 | grep -E "READ (OK|FAIL) .*(f8f9a840|d042cc4c)" || true echo "--- mail-* 总览 ---" node scripts/verify-mail-sessions-readable.mjs --root /root/.dsh/sessions --only mail- 2>&1 | grep -E "候选|可读:|不可读:" echo; echo "### [5/5] 起 dsh.service" systemctl start dsh.service sleep 6 echo "dsh: $(systemctl is-active dsh.service) dsh-lan: $(systemctl is-active dsh-lan.service)" echo; echo "### 残留检查(.repair-staged 应为 0):" echo " .repair-staged: $(find /root/.dsh/sessions -name '*.repair-staged' | wc -l)" echo "### END $(date -Is)"