/**
 * Behavior Embeddings — typed loader for the publish-time-baked
 * `behaviors-embeddings.json` artifact.
 *
 * The catalog in `behaviors-registry.json` lists every organism + atom
 * available in the std library. At publish time, `scripts/build-embeddings.ts`
 * calls the OpenAI Embeddings API once per entry and writes the resulting
 * vectors to `behaviors-embeddings.json`. Downstream consumers
 * (`@almadar-io/agent` Stage A cosine retrieval) read these vectors at
 * runtime to rank organisms / atoms against the user's request — top-K
 * survives into the prompt, the rest is filtered out.
 *
 * One embedding bake per std publish. Runtime cost: one OpenAI embed call
 * per Stage A turn (the user request); the catalog side is free.
 *
 * @packageDocumentation
 */
interface BehaviorEmbeddingsManifest {
    /** Std version at bake time. Matches `package.json` `version`. */
    version: string;
    /** Embedding model used (e.g. `text-embedding-3-small`). */
    model: string;
    /** Vector dimensionality (e.g. 1536 for text-embedding-3-small). */
    dimensions: number;
    /** Per-behavior vectors keyed by canonical name (matches registry keys). */
    vectors: Record<string, readonly number[]>;
}
/**
 * Return the typed embeddings manifest. Returns `null` when the bake step
 * hasn't run (dev workflow, unbundled std checkout without
 * `pnpm run build:embeddings`). Consumers fall back to the full catalog
 * walk in that case.
 */
declare function getBehaviorEmbeddings(): Promise<BehaviorEmbeddingsManifest | null>;
/**
 * Fetch the embedding vector for one behavior by name. Returns `null` when
 * the manifest is missing OR the behavior wasn't indexed at bake time
 * (e.g. a new atom landed after the most recent publish — bake again).
 */
declare function getBehaviorEmbedding(behaviorName: string): Promise<readonly number[] | null>;

export { type BehaviorEmbeddingsManifest, getBehaviorEmbedding, getBehaviorEmbeddings };
