import { Context } from 'koishi'; import type { AttributedMemoryItem } from '../../../contracts/workflows'; import type { PromptMessages } from '../../prompts/prompt_format'; import type { LivingMemoryLogger } from '../../logging/logger'; export type LivingMemoryExtractionSkipReason = 'model-not-configured' | 'model-unavailable'; export interface LivingMemoryExtractionResult { extracted: AttributedMemoryItem[]; prompt: PromptMessages | null; output: string | null; skippedReason: LivingMemoryExtractionSkipReason | null; parseError: string | null; } export interface LivingMemoryExtractionContext { conversationId: string; presetId: string; presetLabel?: string; presetPrompt: string; speakers: Array<{ speakerLabel: string; speakerKey: string; }>; } export declare class LivingMemoryExtractor { private readonly ctx; private readonly mainModel; constructor(ctx: Context, mainModel: string); extract(input: string, context: LivingMemoryExtractionContext, logger: LivingMemoryLogger): Promise; private buildPrompt; }