Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user