import type { TestCase, TestCaseVersion, AgentContextItem, AgentToolDefinition } from '../../types/index.js'; export interface CreateTestCaseInput { /** Optional ID - if provided, will be used instead of generating a new one (useful for migration) */ id?: string; name: string; description?: string; labels?: string[]; /** @deprecated Use labels instead */ category?: string; /** @deprecated Use labels instead */ subcategory?: string; /** @deprecated Use labels instead */ difficulty?: 'Easy' | 'Medium' | 'Hard'; initialPrompt: string; context: AgentContextItem[]; tools?: AgentToolDefinition[]; expectedPPL?: string; expectedOutcomes?: string[]; expectedTrajectory?: { step: number; description: string; requiredTools: string[]; }[]; followUpQuestions?: { trigger: 'results_available' | 'error' | 'always'; question: string; businessValue: string; }[]; tags?: string[]; author?: string; isPromoted?: boolean; } export interface UpdateTestCaseInput { name?: string; description?: string; labels?: string[]; /** @deprecated Use labels instead */ category?: string; /** @deprecated Use labels instead */ subcategory?: string; /** @deprecated Use labels instead */ difficulty?: 'Easy' | 'Medium' | 'Hard'; initialPrompt?: string; context?: AgentContextItem[]; tools?: AgentToolDefinition[]; expectedPPL?: string; expectedOutcomes?: string[]; expectedTrajectory?: { step: number; description: string; requiredTools: string[]; }[]; followUpQuestions?: { trigger: 'results_available' | 'error' | 'always'; question: string; businessValue: string; }[]; tags?: string[]; isPromoted?: boolean; } /** Paginated response from getAll with summary/pagination options */ export interface TestCasePage { testCases: TestCase[]; total: number; after?: string | null; hasMore?: boolean; } declare class AsyncTestCaseStorage { /** * Get all test cases (latest versions), sorted by updatedAt descending * @param options.summary - true to fetch lightweight summary (no context/expectedOutcomes) * @param options.size - page size for pagination * @param options.after - cursor token for next page * @param options.includeSample - whether to include sample/demo data */ getAll(options: { summary?: boolean; size: number; after?: string; includeSample?: boolean; }): Promise; getAll(options?: { summary?: boolean; size?: number; after?: string; includeSample?: boolean; }): Promise; /** * Get only promoted test cases (for Experiments) */ getPromoted(): Promise; /** * Get test cases by specific IDs (for efficient filtered fetching) * Used when you only need test cases for a specific benchmark */ getByIds(ids: string[]): Promise; /** * Get a test case by ID (latest version) */ getById(id: string): Promise; /** * Create a new test case */ create(input: CreateTestCaseInput): Promise; /** * Update a test case (creates new version automatically in OpenSearch) */ update(id: string, updates: UpdateTestCaseInput): Promise; /** * Delete a test case (all versions) */ delete(id: string): Promise; /** * Set promoted status for a test case */ setPromoted(id: string, isPromoted: boolean): Promise; /** * Get all versions of a test case */ getVersions(testCaseId: string): Promise; /** * Get a specific version of a test case */ getVersion(testCaseId: string, version: number): Promise; /** * Generate a unique ID */ generateId(): string; /** * Get unique categories from all test cases * @deprecated Use getLabels() instead */ getCategories(): Promise; /** * Get all unique labels from all test cases */ getLabels(): Promise; /** * Get test cases count */ getCount(): Promise; /** * Get promoted count */ getPromotedCount(): Promise; /** * Bulk create test cases (for migration) */ bulkCreate(testCases: CreateTestCaseInput[]): Promise<{ created: number; errors: boolean; }>; } export declare const asyncTestCaseStorage: AsyncTestCaseStorage; export {}; //# sourceMappingURL=asyncTestCaseStorage.d.ts.map