/** * Model/effort vocabulary: pure checks of a caller's selector against the * descriptor's curated vocabulary, resolving aliases to the harness's own * spelling. Rejections name the accepted vocabulary so the refusal is * actionable without reading the descriptor. Resolution lives in ONE place * (resolveModel) so validation and capability claims cannot drift. */ import { type HarnessDescriptor } from "../knowledge/descriptor.js"; export type Validated = { readonly ok: true; readonly id: string; } | ValidationRefusal; export interface ValidationRefusal { readonly ok: false; readonly reason: string; } /** The one selector grammar for model ids, tool names, and toolMap keys * (RFC-02 change 9): pi documents models as provider/id[:thinking], so * word characters plus the few real separators - never whitespace, shell * metacharacters, or control/format characters, and bounded like session * ids. */ export declare const CLEAN_SELECTOR: RegExp; export interface ResolvedModel { readonly id: string; readonly curated: boolean; } /** Alias-resolve a model selector. Object.hasOwn guards the alias lookup - * "__proto__" must resolve to itself, not to Object.prototype. */ export declare const resolveModel: (h: HarnessDescriptor, model: string) => ResolvedModel; export declare const validateModel: (h: HarnessDescriptor, model: string) => Validated; /** The access preset takes one of the closed ACCESS_VALUES. */ export declare const validateAccess: (value: string) => Validated; /** Resolve a cursor model plus effort to the slug that runs (RFC-05). * The ONE owner of the family, stem, variant, and fast rules; the single * call site is the plan-turn resolve step. Rules apply in * order, first match wins, model checks before effort checks: * unknown-model for a selector naming no slug and no stem (supported * follows the unknown-model convention) and for a bare stem with no * effort (supported is that stem's row slugs); stem plus effort resolves * through the row (missing effort refuses unknown-effort with the stem * ladder); a variant or -fast slug pins its effort (same effort passes * through, a conflict refuses invalid-option-value, nothing is ever * composed); effort with no model or with a bare-only model refuses * unknown-effort with empty supported; a word outside the union ladder * refuses unknown-effort with the union. Returns undefined only when * both inputs are absent. */ export declare const resolveEffortSlug: (h: HarnessDescriptor, model: string | undefined, effort: string | undefined) => string | undefined; /** Validate an effort against the ladder that applies to the pick: the * model's own ladder where the harness constrains per model (codex), else * the harness-wide ladder. */ export declare const validateEffort: (h: HarnessDescriptor, effort: string, model?: string) => Validated; //# sourceMappingURL=vocabulary.d.ts.map