import { YamlStore } from "./yaml-store.js";
/** Grant policy controlling what happens when an agent uses an ungranted tool. */
export type GrantPolicy = 'allow' | 'ask' | 'never';
/** Normalize legacy grant policy values to the new three-value set. */
export declare function normalizeGrantPolicy(value: string): GrantPolicy;
/**
 * Valid thinking level values. Re-exports the shared canonical set so callers
 * that import from role-store keep a stable path. The shared module is the
 * single source of truth — extending the set requires touching one place.
 */
export declare const VALID_THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh"];
/**
 * Validate a model string. Accepts only "<provider>/<modelId>" with non-empty
 * parts on each side of the slash. Empty strings, whitespace-only, or malformed
 * values are silently dropped (returns `undefined`) to avoid breaking role
 * loading on bad input.
 */
export declare function validateModelString(value: unknown): string | undefined;
/**
 * Validate a thinking-level string. Accepts only the canonical set
 * (off, minimal, low, medium, high, xhigh). Unknown values are silently
 * dropped. Clamping against a specific model happens at use-time via
 * `clampThinkingLevel` from `src/shared/thinking-levels.ts`.
 */
export declare function validateThinkingLevel(value: unknown): string | undefined;
export interface Role {
    /** Unique identifier — lowercase alphanumeric + hyphens, immutable after creation */
    name: string;
    /** Human-readable display label */
    label: string;
    /** Markdown system prompt template (supports {{GOAL_BRANCH}} and {{AGENT_ID}} placeholders) */
    promptTemplate: string;
    /** Pixel-art accessory ID for the Bobbit sprite overlay */
    accessory: string;
    /** Per-tool or per-group grant policy overrides (tool name or MCP server prefix → policy) */
    toolPolicies?: Record<string, GrantPolicy>;
    /** "<provider>/<modelId>" — overrides default.sessionModel / default.reviewModel for sessions of this role */
    model?: string;
    /** "off" | "minimal" | "low" | "medium" | "high" | "xhigh" — overrides default thinking level for sessions of this role. Clamped to the role's model capability at write time when a model is set. */
    thinkingLevel?: string;
    createdAt: number;
    updatedAt: number;
}
/**
 * File-backed role store with builtin cascade support.
 * Each role is a YAML file in roles/<name>.yaml.
 */
export declare class RoleStore extends YamlStore<Role> {
    constructor(configDir: string);
    /** Override put to normalize legacy tool policies before saving. */
    put(role: Role): void;
}
//# sourceMappingURL=role-store.d.ts.map