/**
 * Pack folder loader — turn a directory on disk into a typed `Pack`.
 *
 * Authoritative source: `docs/opensquid-real-design.md` §"Pack format" folder
 * layout + Task 2.3 of `docs/tasks/phase-2-pack-format.md`.
 *
 * A pack on disk looks like:
 *
 *     my-pack/
 *       manifest.yaml          ← required
 *       models.yaml            ← optional, FOLDED IN (PR-followup)
 *       channels.yaml          ← optional, Phase 2.4+ consumer
 *       notifications.yaml     ← optional, Phase 2.4+ consumer
 *       drift_response.yaml    ← optional, FOLDED IN (PR-followup)
 *       chat_agent.yaml        ← optional, FOLDED IN (WAB.6)
 *       skills/
 *         <skill-name>/skill.yaml
 *
 * This loader is the *only* read path for a pack folder. It does these things:
 *
 *   1. Parse `manifest.yaml` through `parseYamlFile` + the `Manifest` schema —
 *      the four required fields (name/version/scope/goal) plus defaulted rest.
 *   2. Scan `skills/` (if present) for sub-directories containing a
 *      `skill.yaml` and parse each through the `Skill` schema.
 *   3. PR-followup: parse `models.yaml` (if present) → `Pack.models` so the
 *      LLM-primitive resolver can consult pack-declared aliases.
 *   4. PR-followup: parse `drift_response.yaml` (if present) → `Pack.driftResponse`
 *      so the hook dispatcher can resolve per-rule + default policies instead
 *      of hard-coding `block_tool`.
 *
 * Side files `channels.yaml` / `notifications.yaml` remain orthogonal config
 * consumers (per the original spec risk callout 2) — they wire in via the
 * notification router when that subsystem lands. The two folded-in side
 * files above ARE pack-identity-relevant (model aliases shape rule eval;
 * drift policies shape dispatcher output), so they belong on the Pack.
 *
 * Error surface: every failure flows through `parseYamlFile`, which already
 * threads the source path into both YAML-parse and Zod-validation error
 * messages. The loader just propagates — no extra wrapping needed at this
 * layer. (A structured `PackLoadError` may land in a later task when the
 * setup UI needs to localize messages.)
 *
 * Imports from: node:fs/promises, node:path, schemas/, yaml.ts, runtime/types.
 * Imported by: setup/, runtime bootstrap (Phase 2.4+), test fixtures.
 */
import type { Pack } from '../runtime/types.js';
export declare function loadPack(dir: string): Promise<Pack>;
//# sourceMappingURL=loader.d.ts.map