/**
 * Skill Lineage Manifest — builder (sprint-586).
 *
 * Builds an unanchored manifest from raw skill parameters + training replay snapshot.
 * Anchoring (TSA or Starknet) is performed separately in anchor.ts.
 *
 * trainingReplayRoot = SHA-256(replaySnapshot)
 * poseidonHash       = Poseidon(skillId_felt, version_felt, domain_felt, replayRoot_felt)
 *
 * Both computations are deterministic: same inputs → identical hashes every time.
 *
 * @module skill-manifest/builder
 */
import type { SkillManifest } from "./types.js";
/**
 * Compute the Poseidon commitment over the four manifest fields.
 *
 * Inputs (felt252-encoded):
 *   1. skillId   — labelToFelt (UTF-8 big-endian, 31-byte truncation)
 *   2. version   — labelToFelt
 *   3. domain    — labelToFelt
 *   4. trainingReplayRoot — hexToFelt (first 31 bytes of 32-byte SHA-256)
 *
 * The result is deterministic and ZK-friendly (Poseidon over felt252).
 *
 * @returns Hex string prefixed with "0x" (felt252 canonical form).
 */
export declare function computeManifestHash(manifest: Omit<SkillManifest, "poseidonHash" | "tsaToken" | "starknetAnchorTx" | "grade" | "ipfsCid" | "createdAt">): string;
export interface BuildManifestParams {
    skillId: string;
    version: string;
    domain: string;
    /** Raw deterministic training replay trace (bytes or UTF-8 string). */
    replaySnapshot: string | Buffer;
}
/**
 * Build an unanchored SkillManifest from raw skill parameters.
 *
 * Steps:
 *   1. Compute trainingReplayRoot = SHA-256(replaySnapshot).
 *   2. Compute poseidonHash = Poseidon(skillId, version, domain, trainingReplayRoot).
 *   3. Return manifest with grade = 'unanchored'.
 *
 * Anchoring (TSA or Starknet) must be applied separately via anchor.ts.
 */
export declare function buildManifest(params: BuildManifestParams): SkillManifest;
//# sourceMappingURL=builder.d.ts.map