/** * Auto-Update System * * Fetches new attack patterns from remote sources, * runs the evolution engine, and applies improved rules. * * Sources: * - GitHub Issues (community-reported attacks) * - Published attack datasets * - Honeypot captures */ import { scan } from "../scanner.js"; import type { AttackCategory, AttackSource } from "./corpus.js"; import type { DetectionRule } from "../types.js"; export type UpdateResult = { /** New samples added to corpus. */ samplesAdded: number; /** New rules evolved. */ rulesEvolved: number; /** Samples now detected that were missed before. */ improved: number; /** Samples still missed. */ stillMissed: number; /** Current detection rate. */ detectionRate: number; /** Evolved rules (ready to use). */ rules: DetectionRule[]; }; export type FeedEntry = { text: string; category?: AttackCategory; techniques?: string[]; languages?: string[]; source?: AttackSource; }; /** * Ingest a batch of attack samples, evolve rules, and return results. * * @example * ```ts * import { evolve } from "@hawon/promptguard"; * * const result = await evolve({ * dataDir: "./.promptguard", * feed: [ * { text: "New attack pattern here", category: "instruction_ignore" }, * ], * }); * * console.log(`Detection rate: ${result.detectionRate}`); * console.log(`New rules: ${result.rulesEvolved}`); * ``` */ export declare function evolve(params: { dataDir: string; feed?: FeedEntry[]; generations?: number; }): UpdateResult; /** * Load previously evolved rules from disk. */ export declare function loadEvolvedRules(dataDir: string): DetectionRule[]; /** * Create a scanner that automatically includes evolved rules. * * @example * ```ts * import { createEvolvingScanner } from "@hawon/promptguard"; * * const scanner = createEvolvingScanner({ dataDir: "./.promptguard" }); * const result = scanner.scan("some input"); * ``` */ export declare function createEvolvingScanner(params: { dataDir: string; }): { scan: (input: string, options?: Parameters[1]) => import("../types.js").ScanResult; /** Re-run evolution with new attack data. */ evolve: (feed: FeedEntry[], generations?: number) => UpdateResult; /** Get current evolved rule count. */ evolvedRuleCount: number; };