import type { Category, Mode } from '../../config/categories.js'; import type { OptimizationContext, OptimizationStrategy } from '../types.js'; import type { Intent } from '../../context/types.js'; import { type AcceptedExample, type PromptShape } from '../groundingContext.js'; import { type CurationResult } from '../curator.js'; export declare abstract class BaseStrategy implements OptimizationStrategy { abstract readonly name: string; abstract readonly category: Category; protected llmClient: import("../../llm/client.js").LLMClient; abstract buildSystemPrompt(context: OptimizationContext, platformInstructions?: string): string; protected getModeInstructions(mode: Mode): string; /** * Pass A: intent-specific overlay folded into the system prompt so strategies * actually branch on WHAT the user is trying to do, not just WHICH platform. */ protected getIntentOverlay(intent: Intent | undefined): string; /** * Pass B: shape the system prompt to the downstream LLM's capabilities. * Compact budgets keep only the base prompt plus a one-line mode rule — * small models choke on multi-KB system prompts. (The intent overlay is * appended after shaping by the callers, so it always survives.) */ protected applyShape(systemPrompt: string, shape: PromptShape, mode?: Mode): string; protected getBaseSystemPrompt(): string; renderLastSystemPrompt(context: OptimizationContext, platformInstructions?: string): string; optimize(prompt: string, context: OptimizationContext, platformHints?: string[], platformInstructions?: string): Promise; /** Exposed for the engine to pull into the trace + response. */ lastCuration?: CurationResult; protected runCurator(args: { context: OptimizationContext; systemPrompt: string; originalPrompt: string; acceptedExamples: AcceptedExample[]; platformHints?: string[]; platformInstructions?: string; shape: PromptShape; }): CurationResult; }