import { closeDb, resetDbSingleton } from './db.js'; import type { ProjectIdentity } from './project.js'; export interface SessionData { tokens_in: number; tokens_out: number; cost_usd: number; tool_calls: number; outcome: string; summary: string | null; lines_added?: number; lines_removed?: number; files_changed?: number; } /** Dominant coding style derived from accumulated metrics */ export type CodingStyle = 'balanced' | 'architect' | 'builder' | 'debugger' | 'refactorer'; export interface CreatureState { project_id: string; project_name: string; remote_url: string | null; total_tokens_in: number; total_tokens_out: number; total_tokens: number; total_cost_usd: number; total_sessions: number; total_tool_calls: number; total_lines_added: number; total_lines_removed: number; total_files_changed: number; sessions_success: number; sessions_failure: number; level: number; xp_progress: number; coding_style: CodingStyle; trait_dna: import('./analyzer/dna.js').TraitDNA | null; created_at: string; updated_at: string; } export interface SessionRecord { id: number; project_id: string; tokens_in: number; tokens_out: number; cost_usd: number; tool_calls: number; outcome: string; summary: string | null; lines_added: number; lines_removed: number; files_changed: number; created_at: string; } /** * XP thresholds — exponential curve. * High levels are genuinely hard to reach. * * Lv 1: 10k tokens (~1 solid session) * Lv 3: 75k tokens (~a week of light use) * Lv 5: 350k tokens (~committed user, ~2 weeks heavy) * Lv 7: 1.5M tokens (~major project, ~1-2 months) * Lv 10: 12M tokens (~6+ months of daily use) * Lv 13: 100M tokens (~serious long-term commitment) * Lv 15: 500M tokens (~mythical status) */ declare const LEVEL_THRESHOLDS: number[]; /** Calculate creature level from total tokens using threshold table */ export declare function calculateLevel(totalTokens: number): number; /** Calculate XP progress (0.0-1.0) toward the next level */ export declare function calculateXpProgress(totalTokens: number): number; /** Get the token threshold for a specific level */ export declare function getLevelThreshold(level: number): number; /** Get the max defined level */ export declare function getMaxLevel(): number; /** * Derive dominant coding style from accumulated metrics. */ export declare function deriveCodingStyle(creature: { total_lines_added: number; total_lines_removed: number; total_files_changed: number; sessions_success: number; sessions_failure: number; total_sessions: number; }): CodingStyle; /** Insert or update a project record */ export declare function upsertProject(identity: ProjectIdentity, dbPath?: string): void; /** Record a session and update creature totals atomically. Returns previous and new level for level-up detection. */ export declare function recordSession(projectId: string, session: SessionData, dbPath?: string): { creature: CreatureState; previousLevel: number; leveledUp: boolean; }; /** Get creature state for a project, or null if never fed */ export declare function getCreature(projectId: string, dbPath?: string): CreatureState | null; /** Get all creatures for the user */ export declare function getAllCreatures(dbPath?: string): CreatureState[]; /** Get recent sessions for a project */ export declare function getSessionHistory(projectId: string, limit?: number, dbPath?: string): SessionRecord[]; /** Save or update trait DNA for a creature */ export declare function saveTraitDNA(projectId: string, dna: import('./analyzer/dna.js').TraitDNA, dbPath?: string): void; export { closeDb, resetDbSingleton, LEVEL_THRESHOLDS };