/** * [WHO]: SoulEvolutionEngine, PatternInsight * [FROM]: Depends on soul-core types and config for profile, memory, context, and thresholds * [TO]: Consumed by packages/soul-core/src/index.ts * [HERE]: packages/soul-core/src/evolution.ts - computes deltas, detects patterns, and gates evolution triggers */ import type { SoulProfile, SoulMemory, PersonalityDelta, ValueDelta, SoulEvolution, InteractionContext } from "./types.js"; import type { SoulConfig } from "./config.js"; /** * Soul Evolution Engine */ export declare class SoulEvolutionEngine { private config; private readonly crisisWindowMs; constructor(config: SoulConfig); /** * Compute personality delta based on experience */ computePersonalityDelta(profile: SoulProfile, context: InteractionContext, outcome: "success" | "failure", previousAttempts?: number): PersonalityDelta; /** * Compute value delta based on context and outcome */ computeValueDelta(profile: SoulProfile, context: InteractionContext, outcome: "success" | "failure"): ValueDelta; /** * Apply personality bounds */ private applyPersonalityBounds; /** * Apply value bounds */ private applyValueBounds; /** * Apply delta to profile */ applyEvolution(profile: SoulProfile, evolution: SoulEvolution): SoulProfile; /** * Detect patterns from memory */ detectPatterns(memory: SoulMemory, profile: SoulProfile): PatternInsight[]; /** * Analyze success patterns */ private analyzeSuccessPatterns; /** * Analyze failure patterns */ private analyzeFailurePatterns; /** * Average personality snapshots */ private averagePersonality; /** * Compute personality difference */ private computePersonalityDiff; /** * Check if evolution should be triggered */ shouldEvolve(profile: SoulProfile, context: InteractionContext, triggerType: SoulEvolution["trigger"], memory?: SoulMemory): boolean; private hasRecentFailureCrisis; } /** * Pattern insight from analysis */ export interface PatternInsight { type: "success" | "failure"; category: string; sampleSize: number; avgPersonality?: SoulProfile["personality"]; delta?: Partial; recurring?: boolean; correctedRate?: number; recommendation?: string; confidence: number; }