45 lines
1.4 KiB
Bash
Executable File
45 lines
1.4 KiB
Bash
Executable File
#!/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
|