#!/bin/bash # ============================================================================ # SessionEnd Hook: /clear 时保存会话标题并启动后台 tmux 恢复 # # 流程: # 1. 从 transcript JSONL 提取 customTitle # 2. 保存到临时文件 # 3. 启动后台脚本通过 tmux send-keys 发送 /rename # ============================================================================ # 从 stdin 读取 JSON(3 秒超时防止阻塞) INPUT=$(timeout 3 cat 2>/dev/null) || exit 0 [ -z "${INPUT}" ] && exit 0 # 只在 /clear 时执行 REASON=$(echo "${INPUT}" | jq -r '.reason // empty') [ "${REASON}" != "clear" ] && exit 0 SESSION_ID=$(echo "${INPUT}" | jq -r '.session_id // empty') TRANSCRIPT=$(echo "${INPUT}" | jq -r '.transcript_path // empty') # 从 transcript JSONL 提取最后的 customTitle TITLE="" if [ -n "${TRANSCRIPT}" ] && [ -f "${TRANSCRIPT}" ]; then TITLE=$(grep '"custom-title"' "${TRANSCRIPT}" | tail -1 | jq -r '.customTitle // empty' 2>/dev/null) fi # 没有标题需要保留 [ -z "${TITLE}" ] && exit 0 # 保存标题到临时文件 TMP_FILE="/tmp/claude-saved-title-${SESSION_ID}" printf '%s' "${TITLE}" > "${TMP_FILE}" # 获取当前 tmux pane ID TMUX_PANE_ID="${TMUX_PANE:-}" [ -z "${TMUX_PANE_ID}" ] && exit 0 # 启动后台恢复脚本 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" nohup "${SCRIPT_DIR}/restore-title-via-tmux.sh" "${TMUX_PANE_ID}" "${TMP_FILE}" > /dev/null 2>&1 & disown exit 0