/** * Knowledge Triple Writer Service * * Phase 2: Rule-based extraction of knowledge triples from * create_learning and create_decision operations. * * Design principles: * - Fire-and-forget: never blocks the main tool response * - High-confidence only: rule-based, no guessing * - Uses directUpsert pattern from supabase-client.ts */ /** Controlled predicate vocabulary */ type Predicate = "created_in" | "influenced_by" | "supersedes" | "demonstrates" | "affects_doc" | "created_thread" | "resolves_thread" | "relates_to_thread"; interface TripleCandidate { subject: string; predicate: Predicate; object: string; source_type: string; source_id: string; source_linear_issue?: string; domain?: string[]; project: string; half_life_days: number; created_by: string; } /** * Normalize a persona label to its canonical form. * Strips contextual suffixes like " - UX navigation clarity" or ": Prefers non-invasive..." * Then maps to canonical short name if known. * * Examples: * "Alice Smith" → "Alice" (if mapped) * "Bob - Architectural pattern" → "Bob" (if mapped) * "Alice: Prefers non-invasive instrumentation" → "Alice" (if mapped) * "Unknown Developer - Process decision" → "Unknown Developer" (passthrough) */ export declare function normalizePersonaLabel(raw: string): string; /** * Build a prefixed node label: "Persona: X" for known personas, "Agent: X" for agents. * Normalizes persona names to canonical form. */ export declare function buildInfluencerLabel(rawName: string): string; export interface LearningTripleParams { id: string; learning_type: string; title: string; description: string; scar_type?: string; source_linear_issue?: string; persona_name: string; domain?: string[]; project: string; } /** * Extract triples from a newly created learning using rule-based logic. * Pure function — no side effects. */ export declare function extractLearningTriples(params: LearningTripleParams): TripleCandidate[]; export interface DecisionTripleParams { id: string; title: string; decision: string; rationale: string; personas_involved?: string[]; docs_affected?: string[]; linear_issue?: string; session_id?: string; project: string; agent: string; } /** * Extract triples from a newly created decision using rule-based logic. * Pure function — no side effects. */ export declare function extractDecisionTriples(params: DecisionTripleParams): TripleCandidate[]; /** * Write triples to knowledge_triples table. * Fire-and-forget: errors logged but never thrown to caller. */ export declare function writeTriples(candidates: TripleCandidate[]): Promise; /** * Generate and write triples for a newly created learning. * Fire-and-forget — call with .catch(() => {}). */ export declare function writeTriplesForLearning(params: LearningTripleParams): Promise; /** * Generate and write triples for a newly created decision. * Fire-and-forget — call with .catch(() => {}). */ export declare function writeTriplesForDecision(params: DecisionTripleParams): Promise; export interface ThreadCreationTripleParams { thread_id: string; text: string; linear_issue?: string; session_id?: string; project: string; agent: string; } /** * Extract triples from a newly created thread. * Pure function — no side effects. */ export declare function extractThreadCreationTriples(params: ThreadCreationTripleParams): TripleCandidate[]; export interface ThreadResolutionTripleParams { thread_id: string; text: string; resolution_note?: string; session_id?: string; project: string; agent: string; } /** * Extract triples from a resolved thread. * Pure function — no side effects. */ export declare function extractThreadResolutionTriples(params: ThreadResolutionTripleParams): TripleCandidate[]; /** * Generate and write triples for a newly created thread. * Fire-and-forget — call with .catch(() => {}). */ export declare function writeTriplesForThreadCreation(params: ThreadCreationTripleParams): Promise; /** * Generate and write triples for a resolved thread. * Fire-and-forget — call with .catch(() => {}). */ export declare function writeTriplesForThreadResolution(params: ThreadResolutionTripleParams): Promise; export {}; //# sourceMappingURL=triple-writer.d.ts.map