/**
 * knowledge-pack-builder.ts — assembles the bundled olam knowledge pack.
 *
 * The knowledge pack is a single Markdown string concatenating a curated set
 * of repo docs (README, onboarding, top-level architecture overviews) plus a
 * generated CLI command reference. It is produced at BUILD time by
 * `scripts/gen-knowledge-pack.mjs` (which calls {@link buildKnowledgePack})
 * and emitted into `src/ask/knowledge-pack.generated.ts` so the published
 * `@pleri/olam-cli` tarball ships the pack inline — no repo checkout needed
 * at runtime (the `npx` install case).
 *
 * Why a build-time pack and not runtime file reads alone: outside an olam
 * checkout (installed via `npx`) there is no repo to read, yet operators still
 * ask setup questions. The bundled pack guarantees a useful baseline answer.
 * Inside a checkout, `olam ask` ADDITIONALLY lets the SDK read live repo files
 * (via the Claude Code preset's Read/Grep tools) for fresher, precise answers.
 *
 * This module is pure: callers inject the repo root + a file reader so the
 * generator script and its unit tests share one code path (Rule 9 — the test
 * asserts the assembled shape without touching the real filesystem).
 */
/** A doc to fold into the pack, identified by its repo-relative path. */
export interface PackSource {
    /** Repo-relative path, e.g. `README.md` or `docs/architecture/03-system.md`. */
    readonly path: string;
    /** Human label rendered as the section heading inside the pack. */
    readonly label: string;
    /**
     * When true, a missing file is tolerated (skipped with a note) rather than
     * failing the build. Used for optional overview docs that may be renamed.
     */
    readonly optional?: boolean;
}
/**
 * Curated source list. Ordered most-foundational first so truncation (if a
 * future cap is added) drops the least-essential docs last. Kept small and
 * overview-grade on purpose: the pack is the SDK system prompt, not a full
 * doc dump — bloating it wastes the operator's local-subscription tokens and
 * dilutes answer precision.
 */
export declare const DEFAULT_PACK_SOURCES: readonly PackSource[];
/** Signature of the file reader the builder depends on (test seam). */
export type FileReader = (absPath: string) => string;
/** Signature of the existence check the builder depends on (test seam). */
export type FileExists = (absPath: string) => boolean;
export interface BuildKnowledgePackInput {
    /** Absolute path to the repo root the doc paths resolve against. */
    readonly repoRoot: string;
    /** Reads a file as UTF-8; throws if unreadable. */
    readonly readFile: FileReader;
    /** Returns true when the file exists + is readable. */
    readonly fileExists: FileExists;
    /** Override the source list (tests). Defaults to {@link DEFAULT_PACK_SOURCES}. */
    readonly sources?: readonly PackSource[];
    /**
     * The CLI command reference Markdown (a `command — description` list).
     * Injected so the generator can derive it from the live commander program
     * while tests pass a fixed string. Optional — omitted in pure-doc tests.
     */
    readonly commandReference?: string;
    /** Path joiner (test seam); defaults to POSIX join via the generator. */
    readonly join: (root: string, rel: string) => string;
}
/**
 * Assemble the knowledge pack string from the curated sources + command
 * reference. Pure: no I/O of its own — all filesystem access flows through the
 * injected `readFile`/`fileExists`. Missing REQUIRED docs throw (the build
 * must fail loudly per Rule 12); missing OPTIONAL docs are skipped with an
 * inline note so the pack stays coherent.
 */
export declare function buildKnowledgePack(input: BuildKnowledgePackInput): string;
//# sourceMappingURL=knowledge-pack-builder.d.ts.map