tracevault-core 0.11.2

Core library for TraceVault - AI code tracing and attribution
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;

use crate::token_usage::TokenUsage;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TraceRecord {
    pub id: Uuid,
    pub repo_id: String,
    pub commit_sha: String,
    pub branch: Option<String>,
    pub author: String,
    pub created_at: DateTime<Utc>,
    pub model: Option<String>,
    pub tool: String,
    pub tool_version: Option<String>,
    pub session: Session,
    pub agent_trace: Option<serde_json::Value>,
    pub signature: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Session {
    pub session_id: String,
    pub started_at: DateTime<Utc>,
    pub ended_at: Option<DateTime<Utc>>,
    pub prompts: Vec<Prompt>,
    pub responses: Vec<Response>,
    pub token_usage: TokenUsage,
    pub tools_used: Vec<ToolCall>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Prompt {
    pub text: String,
    pub timestamp: DateTime<Utc>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Response {
    pub text: String,
    pub timestamp: DateTime<Utc>,
    pub tool_calls: Vec<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolCall {
    pub name: String,
    pub input_summary: String,
    pub timestamp: DateTime<Utc>,
}

impl TraceRecord {
    pub fn new(
        repo_id: String,
        commit_sha: String,
        author: String,
        tool: String,
        session: Session,
    ) -> Self {
        Self {
            id: Uuid::new_v4(),
            repo_id,
            commit_sha,
            branch: None,
            author,
            created_at: Utc::now(),
            model: None,
            tool,
            tool_version: None,
            session,
            agent_trace: None,
            signature: None,
        }
    }
}