53 lines
1.5 KiB
Bash
Executable File
53 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Wrapper that runs claude and handles auto-restart signals
|
|
# Usage: meridian-wrapper [claude args...]
|
|
|
|
set -euo pipefail
|
|
|
|
# Find project root (where .meridian exists)
|
|
find_project_root() {
|
|
local dir="$PWD"
|
|
while [[ "$dir" != "/" ]]; do
|
|
if [[ -d "$dir/.meridian" ]]; then
|
|
echo "$dir"
|
|
return 0
|
|
fi
|
|
dir="$(dirname "$dir")"
|
|
done
|
|
echo "$PWD" # Fallback to current dir
|
|
}
|
|
|
|
PROJECT_ROOT="$(find_project_root)"
|
|
SIGNAL_FILE="$PROJECT_ROOT/.meridian/.state/restart-signal"
|
|
|
|
# Clean any stale signal file on startup
|
|
rm -f "$SIGNAL_FILE" 2>/dev/null || true
|
|
|
|
while true; do
|
|
# Run claude with all passed arguments
|
|
claude "$@" || EXIT_CODE=$?
|
|
EXIT_CODE=${EXIT_CODE:-0}
|
|
|
|
# Check for restart signal
|
|
if [[ -f "$SIGNAL_FILE" ]]; then
|
|
# Read the initial prompt from signal file
|
|
INITIAL_PROMPT=$(cat "$SIGNAL_FILE")
|
|
rm -f "$SIGNAL_FILE"
|
|
|
|
echo ""
|
|
echo "🔄 Meridian: Restarting session with prompt: \"$INITIAL_PROMPT\""
|
|
echo ""
|
|
|
|
# Small delay to ensure clean handoff
|
|
sleep 0.5
|
|
|
|
# Restart claude with the prompt as argument
|
|
# Note: claude accepts initial prompt as positional argument
|
|
set -- "$INITIAL_PROMPT" # Replace args with just the prompt
|
|
continue # Loop back to run claude with new args
|
|
else
|
|
# No restart signal - exit wrapper with claude's exit code
|
|
exit $EXIT_CODE
|
|
fi
|
|
done
|