| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #!/usr/bin/env bash
- # Stop the brainstorm server and clean up
- # Usage: stop-server.sh <screen_dir>
- #
- # Kills the server process. Only deletes session directory if it's
- # under /tmp (ephemeral). Persistent directories (.superpowers/) are
- # kept so mockups can be reviewed later.
- SCREEN_DIR="$1"
- if [[ -z "$SCREEN_DIR" ]]; then
- echo '{"error": "Usage: stop-server.sh <screen_dir>"}'
- exit 1
- fi
- PID_FILE="${SCREEN_DIR}/.server.pid"
- if [[ -f "$PID_FILE" ]]; then
- pid=$(cat "$PID_FILE")
- # Try to stop gracefully, fallback to force if still alive
- kill "$pid" 2>/dev/null || true
- # Wait for graceful shutdown (up to ~2s)
- for i in {1..20}; do
- if ! kill -0 "$pid" 2>/dev/null; then
- break
- fi
- sleep 0.1
- done
- # If still running, escalate to SIGKILL
- if kill -0 "$pid" 2>/dev/null; then
- kill -9 "$pid" 2>/dev/null || true
- # Give SIGKILL a moment to take effect
- sleep 0.1
- fi
- if kill -0 "$pid" 2>/dev/null; then
- echo '{"status": "failed", "error": "process still running"}'
- exit 1
- fi
- rm -f "$PID_FILE" "${SCREEN_DIR}/.server.log"
- # Only delete ephemeral /tmp directories
- if [[ "$SCREEN_DIR" == /tmp/* ]]; then
- rm -rf "$SCREEN_DIR"
- fi
- echo '{"status": "stopped"}'
- else
- echo '{"status": "not_running"}'
- fi
|