start-server.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/bin/bash
  2. # Start the brainstorm server and output connection info
  3. # Usage: start-server.sh [--project-dir <path>]
  4. #
  5. # Starts server on a random high port, outputs JSON with URL.
  6. # Each session gets its own directory to avoid conflicts.
  7. #
  8. # Options:
  9. # --project-dir <path> Store session files under <path>/.superpowers/brainstorm/
  10. # instead of /tmp. Files persist after server stops.
  11. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  12. # Parse arguments
  13. PROJECT_DIR=""
  14. while [[ $# -gt 0 ]]; do
  15. case "$1" in
  16. --project-dir)
  17. PROJECT_DIR="$2"
  18. shift 2
  19. ;;
  20. *)
  21. echo "{\"error\": \"Unknown argument: $1\"}"
  22. exit 1
  23. ;;
  24. esac
  25. done
  26. # Generate unique session directory
  27. SESSION_ID="$$-$(date +%s)"
  28. if [[ -n "$PROJECT_DIR" ]]; then
  29. SCREEN_DIR="${PROJECT_DIR}/.superpowers/brainstorm/${SESSION_ID}"
  30. else
  31. SCREEN_DIR="/tmp/brainstorm-${SESSION_ID}"
  32. fi
  33. PID_FILE="${SCREEN_DIR}/.server.pid"
  34. LOG_FILE="${SCREEN_DIR}/.server.log"
  35. # Create fresh session directory
  36. mkdir -p "$SCREEN_DIR"
  37. # Kill any existing server
  38. if [[ -f "$PID_FILE" ]]; then
  39. old_pid=$(cat "$PID_FILE")
  40. kill "$old_pid" 2>/dev/null
  41. rm -f "$PID_FILE"
  42. fi
  43. # Start server, capturing output to log file
  44. cd "$SCRIPT_DIR"
  45. BRAINSTORM_DIR="$SCREEN_DIR" node index.js > "$LOG_FILE" 2>&1 &
  46. SERVER_PID=$!
  47. echo "$SERVER_PID" > "$PID_FILE"
  48. # Wait for server-started message (check log file)
  49. for i in {1..50}; do
  50. if grep -q "server-started" "$LOG_FILE" 2>/dev/null; then
  51. grep "server-started" "$LOG_FILE" | head -1
  52. exit 0
  53. fi
  54. sleep 0.1
  55. done
  56. # Timeout - server didn't start
  57. echo '{"error": "Server failed to start within 5 seconds"}'
  58. exit 1