claude-hindsight 2.4.0

20/20 hindsight for your Claude Code sessions
Documentation
//! Telemetry summary routes

use crate::server::{error::ApiError, AppState};
use axum::{extract::State, Json};
use serde::Serialize;

use super::with_index;

#[derive(Serialize)]
pub struct TelemetrySummary {
    pub total_sessions: usize,
    pub input_tokens: i64,
    pub output_tokens: i64,
    pub cache_read_tokens: i64,
    pub cache_creation_tokens: i64,
    pub cost_usd: f64,
}

#[derive(Serialize)]
pub struct SessionTelemetry {
    pub session_id: String,
    pub project_name: String,
    pub input_tokens: i64,
    pub output_tokens: i64,
    pub cache_read_tokens: i64,
    pub cache_creation_tokens: i64,
    pub cost_usd: f64,
}

pub async fn telemetry_summary(
    State(_state): State<AppState>,
) -> Result<Json<TelemetrySummary>, ApiError> {
    with_index(|index| index.get_telemetry_summary()).await
}

pub async fn telemetry_sessions(
    State(_state): State<AppState>,
) -> Result<Json<Vec<SessionTelemetry>>, ApiError> {
    with_index(|index| index.get_telemetry_per_session()).await
}