Initial commit: Claude Code Monitor v1.0.0

Complete real-time monitoring dashboard for Claude Code

Features:
- FastAPI backend with REST API and WebSocket
- React + TypeScript frontend with dark theme
- SQLite database for event storage
- 6 hook scripts for Claude Code events
- Docker deployment setup
- Real-time event tracking and statistics
- Event filtering (ALL, TOOLS, AGENTS, PROMPTS, SESSIONS)
- Connection status indicator
- Reset stats functionality

Tech Stack:
- Backend: Python 3.11, FastAPI, SQLAlchemy, WebSockets
- Frontend: React 18, TypeScript, Vite
- Database: SQLite
- Deployment: Docker, Docker Compose

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
felix.zoesch
2025-12-15 09:49:06 +01:00
commit f6ef7ff5d3
48 changed files with 3375 additions and 0 deletions

90
backend/app/main.py Normal file
View File

@@ -0,0 +1,90 @@
"""Main FastAPI application for Claude Code Monitor."""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
import logging
import time
from app.database import init_db
from app.api import events, statistics, websocket_endpoint
from app.schemas import HealthResponse
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan handler for startup and shutdown events."""
# Startup
logger.info("Starting Claude Code Monitor backend...")
init_db()
logger.info("Database initialized successfully")
logger.info("Backend ready to receive events")
yield
# Shutdown
logger.info("Shutting down Claude Code Monitor backend...")
# Create FastAPI app
app = FastAPI(
title="Claude Code Monitor API",
description="Real-time monitoring dashboard for Claude Code activity",
version="1.0.0",
lifespan=lifespan,
)
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # In production, specify exact origins
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(events.router)
app.include_router(statistics.router)
app.include_router(websocket_endpoint.router)
# Health check endpoint
@app.get("/health", response_model=HealthResponse, tags=["health"])
async def health_check():
"""
Health check endpoint.
Returns the service status and current timestamp.
"""
return HealthResponse(status="healthy", timestamp=time.time())
# Root endpoint
@app.get("/", tags=["info"])
async def root():
"""Root endpoint with API information."""
return {
"name": "Claude Code Monitor API",
"version": "1.0.0",
"status": "running",
"docs": "/docs",
"websocket": "/ws",
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host="0.0.0.0",
port=8000,
reload=True,
log_level="info",
)