/** * MAMA (Memory-Augmented MCP Architecture) - Decision Tracker * * Learn and store decisions with graph relationships * Tasks: 3.1-3.9 (Learn decision, ID generation, supersedes edges, refinement, embeddings) * AC #1: Decision stored with outcome=NULL, confidence from LLM * AC #2: Supersedes relationship creation * AC #5: Multi-parent refinement with confidence calculation * * Updated for PostgreSQL compatibility via db-manager * * @module decision-tracker * @version 2.0 * @date 2025-11-17 */ import type { DecisionRecord } from './db-manager.js'; export type { DecisionRecord }; export declare const VALID_EDGE_TYPES: readonly ["supersedes", "refines", "contradicts", "builds_on", "debates", "synthesizes"]; export type EdgeType = (typeof VALID_EDGE_TYPES)[number]; /** * Decision detection result from analysis */ export interface DecisionDetection { topic: string; decision: string; reasoning: string; confidence: number; type?: string; trust_context?: Record; evidence?: string | string[]; alternatives?: string | string[]; risks?: string; } /** * Tool execution context */ export interface ToolExecution { timestamp?: number; tool_name?: string; tool_input?: unknown; exit_code?: number; } /** * Session context for decision tracking */ export interface SessionContext { session_id?: string; latest_user_message?: string; recent_exchange?: string; } /** * Learn decision result */ export interface LearnDecisionResult { decisionId: string; notification: unknown | null; } /** * Parsed relationship from reasoning */ export interface ParsedRelationship { type: string; targetIds: string[]; } /** * Generate decision ID * * Task 3.2: Generate decision ID: `decision_${topic}_${timestamp}` * * @param topic - Decision topic * @returns Decision ID */ export declare function generateDecisionId(topic: string): string; /** * Check for previous decision on same topic * * Task 3.3: Query decisions table WHERE topic=? AND superseded_by IS NULL * AC #2: Find previous decision to create supersedes relationship * * @param topic - Decision topic * @returns Previous decision or null */ export declare function getPreviousDecision(topic: string): Promise; /** * Create a decision edge with specified relationship type * * Story 2.1: Generic edge creation supporting all relationship types * * @param fromId - Source decision ID * @param toId - Target decision ID * @param relationship - Edge type (supersedes, builds_on, debates, synthesizes, etc.) * @param reason - Reason for the relationship * @returns Success status */ export declare function createEdge(fromId: string, toId: string, relationship: string, reason: string): Promise; /** * Create supersedes edge * * Task 3.5: Create supersedes edge (INSERT INTO decision_edges) * AC #2: Supersedes relationship creation * * @param fromId - New decision ID * @param toId - Previous decision ID * @param reason - Reason for superseding */ export declare function createSupersedesEdge(fromId: string, toId: string, reason: string): Promise; /** * Update previous decision's superseded_by field * * Task 3.5: Update previous decision's superseded_by field * AC #2: Previous decision's superseded_by field updated * * @param previousId - Previous decision ID * @param newId - New decision ID */ export declare function markSuperseded(previousId: string, newId: string): Promise; /** * Calculate combined confidence (Bayesian update) * * Task 3.6: Calculate combined confidence for multi-parent refinement * AC #5: Confidence score calculated based on history * * @param prior - Prior confidence * @param parents - Parent decisions * @returns Updated confidence (0.0-1.0) */ export declare function calculateCombinedConfidence(prior: number, parents: Array<{ confidence?: number; }>): number; /** * Detect multi-parent refinement * * Task 3.6: Detect if new decision refines multiple previous decisions * AC #5: Multi-parent refinement * * @param _detection - Decision detection result * @param _sessionContext - Session context * @returns Array of parent decision IDs or null */ export declare function detectRefinement(_detection: DecisionDetection, _sessionContext: SessionContext): string[] | null; /** * Parse reasoning field for relationship references * * Story 2.2: Detect patterns like: * - builds_on: * - debates: * - synthesizes: [id1, id2] * * @param reasoning - Decision reasoning text * @returns Detected relationships */ export declare function parseReasoningForRelationships(reasoning: string): ParsedRelationship[]; /** * Create edges from parsed reasoning relationships * * Story 2.2: Auto-create edges when reasoning references other decisions * * @param fromId - Source decision ID * @param reasoning - Decision reasoning text * @returns Edge creation stats */ export declare function createEdgesFromReasoning(fromId: string, reasoning: string): Promise<{ created: number; failed: number; }>; /** * Get supersedes chain depth for a topic * * Story 2.2: Calculate how many times a topic has been superseded * * @param topic - Decision topic * @returns Chain depth and decision IDs */ export declare function getSupersededChainDepth(topic: string): Promise<{ depth: number; chain: string[]; }>; /** * Learn Decision Function (Main API) * * Task 3.1: Create Learn Decision Function * Task 3.2: Generate decision ID * Task 3.3: Check for previous decision on same topic * Task 3.4: Insert new decision with outcome=NULL, confidence from LLM * Task 3.5: If previous exists: Create supersedes edge, Update previous superseded_by * Task 3.6: If multi-parent refinement: Store refined_from, Calculate combined confidence * Task 3.7: Generate enhanced embedding * Task 3.8: Store embedding (link via rowid) * * AC #1: Decision stored with outcome=NULL, confidence from LLM * AC #2: Supersedes relationship creation * AC #5: Multi-parent refinement with confidence calculation * * @param detection - Decision detection result * @param toolExecution - Tool execution data * @param sessionContext - Session context * @returns decisionId and notification */ export declare function learnDecision(detection: DecisionDetection, toolExecution: ToolExecution, sessionContext: SessionContext): Promise; /** * Evidence item for confidence updates */ export interface EvidenceItem { type: 'success' | 'failure' | 'partial'; impact: number; } /** * Update confidence score * * Task 6: Confidence evolution (used in outcome tracking) * AC #5: Confidence score calculated based on history * * @param prior - Prior confidence * @param evidence - Evidence items * @returns Updated confidence (0.0-1.0) */ export declare function updateConfidence(prior: number, evidence: EvidenceItem[]): number; //# sourceMappingURL=decision-tracker.d.ts.map