/** * version — is this string a version, or something that looks like one? * * Pattern: a total predicate + a refusal sentence. Pure, no dependencies. * Role: recipes/ layer. Used by `defineAgentRecipe` and by the same * validation `AgentBuilder.recipe()` runs on a hand-written literal. * Emits: N/A. * * ## Why strict SemVer, and why a near-miss is refused rather than repaired * * The version is the half of a recipe row that makes the other half worth * reading: two runs of `support-desk` that behaved differently are a mystery * until the record says `1.2.0` and `1.3.0`. That only works if every producer * spells versions the same way, so the ones that would quietly break grouping * are refused at the declaration: * * `'1.2'` two runs, `'1.2'` and `'1.2.0'`, that are the same version and * do not group together. * `'v1.2.3'` the same, with a decoration that sorts differently. * `'1.02.3'` leading zeros: `'1.02.3'` and `'1.2.3'` again split one arm. * `'latest'` a RANGE, not a version — it names whatever was installed, so * `'^1.2.3'` the row would describe a different composition each week and * `'1.x'` say nothing about the run it is stamped on. * * None is repaired. Padding `'1.2'` to `'1.2.0'` would put a version on the * record that the author never wrote, which is the one thing a manifest field * may not do. */ /** Whether `value` is a SemVer 2.0.0 version string. Total: any input, no throw. */ export declare function isSemverVersion(value: unknown): value is string; /** * The sentence a bad version gets. Names the value, the grammar, and the * specific mistake when the shape identifies one — a refusal that only says * "invalid" makes the author guess which half was wrong. * * @param callSite - the API the author called, e.g. `defineAgentRecipe`. */ export declare function versionRefusal(callSite: string, value: unknown): string; //# sourceMappingURL=version.d.ts.map