/**
 * Lesson primitives: `propose_lesson`, `promote_lesson`, `recall_lesson`.
 *
 * T-loop-engine-reintegration T.6 — surfaces the loop-engine wedge gate
 * to skills. Three atomic primitives compose into capture/promote/recall
 * workflows; the gate itself lives in `engine/src/engine/lessons/gate.rs`.
 *
 * Why these three (and only these three):
 *   - `propose_lesson` — the capture surface. Skill authors call this
 *     when an agent or user proposes a new lesson candidate. Agent-
 *     authored lessons remain `pending` until the gate promotes them;
 *     user-authored lessons skip the gate (eviction-immune via
 *     `Authorship::is_immune` per T.1.G).
 *   - `promote_lesson` — the gate firing surface. Calls engine's
 *     `lesson.promote`, which runs the wedge checks. A block here is
 *     the entire competitive moat (per
 *     `project_2026_05_12_strategic_pivot`): the only system that
 *     refuses to self-grade promotions. We surface the block as a
 *     successful `ok({status:'blocked', reasons})` because the block IS
 *     the system working as designed — not a runtime error.
 *   - `recall_lesson` — text-match retrieval across pending/active/
 *     promoted/superseded status dirs (T.1.B). NOT vector — that
 *     property surfaces evidence-less lessons during the capture loop
 *     even when the embedder is degraded.
 *
 * What's intentionally NOT here (out of scope; pack-install only):
 *   - `pack_id`, `external_id`, `seed_as_promoted` on propose_lesson —
 *     pack-authored seed paths handled by a separate install flow
 *     (T.1.B notes the validation rules: `pack_id` required when
 *     `authored_by === 'pack'`, `seed_as_promoted` requires
 *     `authored_by === 'pack'`).
 *
 * Authored_by encoding gotcha (T.1.G):
 *   The wire input only honors `'user'` and `'pack'`. Anything else —
 *   including `'agent'` from a Zod-validated arg — silently maps to
 *   engine's `Llm` default. We accept `'user' | 'agent'` from skill
 *   authors for ergonomic symmetry with the existing `store_lesson`
 *   primitive, then translate: `'user'` passes through verbatim;
 *   `'agent'` becomes `undefined` (engine default Llm). User-authored
 *   lessons are eviction-immune; agent/llm-authored aren't.
 *
 * Why no "permits promotion" test (deliberate scope correction per
 * T.1.F + T.1.HH + spec line 967-969):
 *   The engine's `PromotionConfig::default()` requires:
 *     min_age = 24 hours
 *     min_applied_count = 3 (via manifest.assemble side effect)
 *     external_signal_sources non-empty (via lesson.capture_feedback)
 *     causal_narrative present (auto-built when evidence is supplied)
 *   None of those are satisfiable in unit-test timescales — that's the
 *   moat working as designed, not a bug. T.6 proves the gate FIRES
 *   (block-only E2E); production promotion only happens over real
 *   session usage. T.8 will file an engine follow-up to expose a
 *   PromotionConfig override for testing, but that's NOT in T.6 scope.
 *
 * Imports from: zod, ../engine/client.js, ../engine/types.js,
 *   ../runtime/result.js, ./registry.js.
 * Imported by: ../runtime/bootstrap.ts.
 */
import { type WedgeLessonStore } from '../rag/wedge/store.js';
import type { FunctionRegistry } from './registry.js';
export declare function registerLessonFunctions(registry: FunctionRegistry, store: WedgeLessonStore): void;
/**
 * Result of a `promote_lesson` call.
 *
 * `'promoted'` means the engine accepted the promotion (the wedge gate ran
 * AND passed — production happy path after 24h+ real session usage).
 *
 * `'blocked'` means the engine ran the gate and refused the promotion.
 * `reasons` carries kebab-case BlockReason::Display strings (T.1.F). This
 * is the moat firing, NOT an error — skills branch on this field to
 * decide whether to surface the block to the user or capture more
 * evidence and retry.
 */
export type PromoteLessonResult = {
    status: 'promoted';
    detail: {
        id: string;
        status: 'promoted';
    };
} | {
    status: 'blocked';
    reasons: string[];
};
//# sourceMappingURL=lessons.d.ts.map