| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/bin/bash
- # Start the brainstorm server and output connection info
- # Usage: start-server.sh [--project-dir <path>]
- #
- # Starts server on a random high port, outputs JSON with URL.
- # Each session gets its own directory to avoid conflicts.
- #
- # Options:
- # --project-dir <path> Store session files under <path>/.superpowers/brainstorm/
- # instead of /tmp. Files persist after server stops.
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
- # Parse arguments
- PROJECT_DIR=""
- while [[ $# -gt 0 ]]; do
- case "$1" in
- --project-dir)
- PROJECT_DIR="$2"
- shift 2
- ;;
- *)
- echo "{\"error\": \"Unknown argument: $1\"}"
- exit 1
- ;;
- esac
- done
- # Generate unique session directory
- SESSION_ID="$$-$(date +%s)"
- if [[ -n "$PROJECT_DIR" ]]; then
- SCREEN_DIR="${PROJECT_DIR}/.superpowers/brainstorm/${SESSION_ID}"
- else
- SCREEN_DIR="/tmp/brainstorm-${SESSION_ID}"
- fi
- PID_FILE="${SCREEN_DIR}/.server.pid"
- LOG_FILE="${SCREEN_DIR}/.server.log"
- # Create fresh session directory
- mkdir -p "$SCREEN_DIR"
- # Kill any existing server
- if [[ -f "$PID_FILE" ]]; then
- old_pid=$(cat "$PID_FILE")
- kill "$old_pid" 2>/dev/null
- rm -f "$PID_FILE"
- fi
- # Start server, capturing output to log file
- cd "$SCRIPT_DIR"
- BRAINSTORM_DIR="$SCREEN_DIR" node index.js > "$LOG_FILE" 2>&1 &
- SERVER_PID=$!
- echo "$SERVER_PID" > "$PID_FILE"
- # Wait for server-started message (check log file)
- for i in {1..50}; do
- if grep -q "server-started" "$LOG_FILE" 2>/dev/null; then
- grep "server-started" "$LOG_FILE" | head -1
- exit 0
- fi
- sleep 0.1
- done
- # Timeout - server didn't start
- echo '{"error": "Server failed to start within 5 seconds"}'
- exit 1
|