39 lines
1.0 KiB
Bash
Executable File
39 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# session-start.sh - SessionStart hook for baseline capture
|
|
# Purpose: Capture working tree state as baseline when Claude session starts
|
|
|
|
# Source library functions
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/git-state.sh"
|
|
source "$SCRIPT_DIR/../lib/state-manager.sh"
|
|
|
|
# Read hook input from stdin
|
|
input=$(cat)
|
|
session_id=$(echo "$input" | jq -r '.session_id')
|
|
|
|
# Hook is already executed in project directory (cwd field in JSON)
|
|
|
|
# Check if this is a git repository
|
|
if ! git rev-parse --git-dir &>/dev/null; then
|
|
# Not a git repo - disable plugin gracefully
|
|
exit 0
|
|
fi
|
|
|
|
# Capture baseline tree
|
|
baseline_tree=$(capture_tree)
|
|
if [[ -z "$baseline_tree" ]]; then
|
|
echo "ERROR: Failed to capture baseline tree" >&2
|
|
exit 0 # Fail open
|
|
fi
|
|
|
|
# Capture current branch name for staleness detection
|
|
baseline_branch=$(get_current_branch)
|
|
|
|
# Write session state (with branch tracking)
|
|
write_session_state "$session_id" "$baseline_tree" "$baseline_branch"
|
|
|
|
# Allow session start
|
|
exit 0
|