import type { TestAssertion } from '@/lib/testing/types'; /** * Interview template types. Completion of each item is verified by the harness * (the completion gate), reusing the benchmark TestAssertion machinery. */ export interface InterviewItem { /** Stable id, used in the agenda and for per-item completion feedback. */ id: string; /** What to gather from the user (the agent's instruction for this item). */ elicit: string; /** How the harness verifies the item is satisfied (file checks and/or judge). */ completion: TestAssertion[]; /** Required items gate completion; optional items are nice-to-have. Defaults to true. */ required?: boolean; } /** An action offered to the user when an interview completes. */ export interface InterviewHandoff { label: string; prompt: string; mode: 'code' | 'chat'; } export interface InterviewTemplate { id: string; title: string; description: string; items: InterviewItem[]; /** The artifact(s) the interview produces, under /.interviews/. */ artifacts: { path: string; description?: string }[]; /** Optional action offered when the interview completes. */ handoff?: InterviewHandoff; /** Custom-only metadata. Undefined on built-ins. */ isBuiltIn?: boolean; createdAt?: Date; updatedAt?: Date; lastSyncedAt?: Date | null; serverUpdatedAt?: Date | null; }