← kuato
/**
* Types for Claude Code session JSONL format
*/
export interface SessionMessage {
parentUuid: string | null;
isSidechain: boolean;
userType: 'external' | 'internal';
cwd: string;
sessionId: string;
version: string;
gitBranch: string;
type: 'user' | 'assistant';
message: UserMessage | AssistantMessage;
uuid: string;
timestamp: string;
requestId?: string;
}
export interface UserMessage {
role: 'user';
content: string;
}
export interface AssistantMessage {
role: 'assistant';
content: ContentBlock[];
id: string;
model: string;
stop_reason: string;
stop_sequence: string | null;
type: 'message';
usage: TokenUsage;
}
export interface ContentBlock {
type: 'text' | 'tool_use' | 'tool_result';
text?: string;
id?: string;
name?: string;
input?: Record<string, unknown>;
}
export interface TokenUsage {
input_tokens: number;
output_tokens: number;
cache_creation_input_tokens: number;
cache_read_input_tokens: number;
cache_creation?: {
ephemeral_5m_input_tokens: number;
ephemeral_1h_input_tokens: number;
};
service_tier?: string;
}
/**
* Parsed session data extracted from JSONL
*/
export interface ParsedSession {
id: string;
startedAt: Date;
endedAt: Date;
gitBranch: string;
cwd: string;
version: string;
messageCount: number;
// Token totals
inputTokens: number;
outputTokens: number;
cacheCreationTokens: number;
cacheReadTokens: number;
// Extracted data
userMessages: string[];
toolsUsed: string[];
filesFromToolCalls: string[];
modelsUsed: string[];
// Per-model token breakdown
modelTokens: Record<string, {
input: number;
output: number;
cacheCreation: number;
cacheRead: number;
}>;
}
/**
* Search result with relevance scoring
*/
export interface SearchResult extends ParsedSession {
relevance?: number;
matchedOn?: string[];
transcriptPath: string;
}
/**
* Search options
*/
export interface SearchOptions {
query?: string;
days?: number;
since?: Date;
until?: Date;
tools?: string[];
filePattern?: string;
limit?: number;
}