/** * Enrichment maps shared by the full maintain scan and the `--facts` preview * (v12) AND the maintenance_probe tool (0.3.9): one construction = the probe * and the facts block can never disagree about descriptions, support files, * or quality (the 0.3.8 review found the probe answering "description=missing" * while the facts block measured real lengths — probe snapshots carried no * enrichment at all). */ import type { Context } from '@deepseek-ai/cordis'; import type { SnapshotOptions } from './drift-scan.ts'; import { type SkillLibrary, type SkillLiveness } from '@lmzhen/dsh-evolution-core'; export interface Enrichment { descriptions: ReadonlyMap; supportFiles: ReadonlyMap; quality: ReadonlyMap; usageObservedValue: boolean | undefined; /** Protection marker per skill (list().protectedBy — single source). */ protected: ReadonlyMap; /** Skills whose frontmatter the strict-YAML platform catalog cannot load. */ catalogInvalid: ReadonlyMap; /** Per-support-file read counts (design §5.5) — present only where the usage * sidecar recorded at least one read, so absence stays "no evidence". */ demand: ReadonlyMap>>; /** Idle age per skill (design §5.6) — present only for skills with a usage * record, so a skill the sidecar never saw stays "no age evidence". */ liveness: ReadonlyMap; /** Support-file char counts for files big enough to possibly exceed the cap * (design §16.6) — present only where at least one such file exists, so the * common measured-and-clean case adds no field. */ supportChars: ReadonlyMap>>; } /** * The ONE enrichment → snapshot-options mapping (T3-02/A30). * * Three callers assemble drift snapshots from the same enrichment — the full scan, the * `--facts` preview, and the `maintenance_probe` tool. Kept as one function because a hand-written * literal per caller is a copy that drifts: the probe's literal omitted `liveness`, so the deep-dive * channel answered `retire: no-age` ("age unknown ⇒ not enough evidence") for every skill, for ever, * while the facts block listed retirement candidates for the same tree. Adding a measured field to * {@link Enrichment} now reaches every surface through this mapping. * @param enrichment - the built enrichment maps. * @returns the snapshot options carrying every field the enrichment measured. */ export declare function enrichmentSnapshotOptions(enrichment: Enrichment): SnapshotOptions; export declare function buildEnrichment(ctx: Context, library: SkillLibrary): Promise; //# sourceMappingURL=enrichment.d.ts.map