/** * LexSona Behavioral Rules Queries * * CRUD operations and search functions for behavioral rules. * Part of LexSona v0 Integration (0.5.0 Tier 4). * * @see docs/research/LexSona/MATH_FRAMEWORK_v0.1.md */ import Database from "better-sqlite3-multiple-ciphers"; import type { BehaviorRule, BehaviorRuleWithConfidence, RuleScope, RuleSeverity } from "./lexsona-types.js"; /** * Database row type for lexsona_behavior_rules table */ export interface BehaviorRuleRow { rule_id: string; category: string; text: string; scope: string; alpha: number; beta: number; observation_count: number; severity: string; decay_tau: number; created_at: string; updated_at: string; last_observed: string; frame_id: string | null; } /** * Save a BehaviorRule to the database (insert or update) */ export declare function saveBehaviorRule(db: Database.Database, rule: BehaviorRule): void; /** * Get a BehaviorRule by ID */ export declare function getBehaviorRuleById(db: Database.Database, ruleId: string): BehaviorRuleWithConfidence | null; /** * Find an existing rule by matching context (module_id and text) */ export declare function findRuleByContext(db: Database.Database, moduleId: string | undefined, text: string): BehaviorRuleWithConfidence | null; /** * Delete a BehaviorRule by ID */ export declare function deleteBehaviorRule(db: Database.Database, ruleId: string): boolean; /** * Get count of all BehaviorRules */ export declare function getBehaviorRuleCount(db: Database.Database): number; /** * Increment alpha (reinforcement) for an existing rule */ export declare function reinforceRule(db: Database.Database, ruleId: string): boolean; /** * Increment beta (counterexample) for an existing rule */ export declare function counterExampleRule(db: Database.Database, ruleId: string): boolean; /** * Promote a rule to "core" status by setting observation_count >= minN * * Core rules are immediately visible in getRules without needing multiple observations. * This bumps observation_count to minN (default 3) and adjusts alpha proportionally. * * @param db - Database connection * @param ruleId - Rule ID to promote * @param targetN - Target observation count (default: MIN_OBSERVATION_COUNT) * @returns Updated rule or null if not found */ export declare function promoteRule(db: Database.Database, ruleId: string, targetN?: number): BehaviorRuleWithConfidence | null; /** * Create a new behavior rule with initial observation */ export declare function createBehaviorRule(db: Database.Database, params: { text: string; scope: RuleScope; category?: string; severity?: RuleSeverity; frameId?: string; }): BehaviorRuleWithConfidence; /** * Get all behavior rules matching a context, sorted by effective confidence * * @param db - Database connection * @param context - Context for filtering rules * @param options - Options for filtering * @returns Rules matching context, sorted by effective_confidence descending */ export declare function getRulesByContext(db: Database.Database, context: { module_id?: string; task_type?: string; environment?: string; project?: string; agent_family?: string; context_tags?: string[]; }, options?: { minN?: number; minConfidence?: number; limit?: number; }): BehaviorRuleWithConfidence[]; /** * Get all behavior rules without filtering */ export declare function getAllBehaviorRules(db: Database.Database, limit?: number): BehaviorRuleWithConfidence[]; import type { PersonaRecord, PersonaSource, ListPersonasFilter } from "./lexsona-types.js"; /** * Database row type for personas table */ export interface PersonaRow { id: string; version: string; manifest_yaml: string; created_at: string; updated_at: string; source: string; checksum: string | null; } /** * Save a persona to the database (insert only, fails if exists) * * @param db - Database connection * @param id - Persona identifier (e.g., "quality-first_engineering") * @param manifest - Full YAML content * @param version - Semantic version (e.g., "1.0.0") * @param source - Source type (default: "user") */ export declare function savePersona(db: Database.Database, id: string, manifest: string, version: string, source?: PersonaSource): void; /** * Get a persona by ID * * @param db - Database connection * @param id - Persona identifier * @returns PersonaRecord or null if not found */ export declare function getPersona(db: Database.Database, id: string): PersonaRecord | null; /** * List all personas, optionally filtered by source * * @param db - Database connection * @param filter - Optional filter by source * @returns Array of PersonaRecords */ export declare function listPersonas(db: Database.Database, filter?: ListPersonasFilter): PersonaRecord[]; /** * Delete a persona by ID * * @param db - Database connection * @param id - Persona identifier * @returns true if deleted, false if not found */ export declare function deletePersona(db: Database.Database, id: string): boolean; /** * Upsert a persona (update if exists, insert if not) * * @param db - Database connection * @param id - Persona identifier * @param manifest - Full YAML content * @param version - Semantic version * @param source - Source type (default: "user") */ export declare function upsertPersona(db: Database.Database, id: string, manifest: string, version: string, source?: PersonaSource): void; /** * Get the checksum for a persona (for sync detection) * * @param db - Database connection * @param id - Persona identifier * @returns Checksum string or null if not found */ export declare function getPersonaChecksum(db: Database.Database, id: string): string | null;