export type ParsedAdapterReport = { validationResult?: 'PASS' | 'FAIL'; nodeCommandNotFound: boolean; }; export type AdapterReadinessEntry = { name: 'adapter'; status: 'PASS' | 'FAIL' | 'MISSING'; notes: ReadonlyArray; }; export type AdapterReadinessSummary = { verdict: 'READY' | 'BLOCKED' | 'PENDING'; adapters: ReadonlyArray; blockers: ReadonlyArray; missingInputs: ReadonlyArray; }; export type SummarizeAdapterReadinessParams = { hasAdapterReport: boolean; adapter?: ParsedAdapterReport; }; export type BuildAdapterReadinessMarkdownParams = { generatedAt: string; adapterReportPath: string; hasAdapterReport: boolean; summary: AdapterReadinessSummary; }; export const dedupeAdapterReadinessValues = ( values: ReadonlyArray ): string[] => { const seen = new Set(); const result: string[] = []; for (const value of values) { if (seen.has(value)) { continue; } seen.add(value); result.push(value); } return result; };