/**
 * RealFace — enroll a real person's face as a reusable video avatar.
 *
 * Wraps BlockRun's /v1/realface/* flow so the agent never hand-rolls paths or
 * x402. Enrollment is a three-step, human-in-the-loop flow because the upstream
 * provider (Token360 / BytePlus) requires a live liveness check on a phone:
 *
 *   1. action="init" (FREE)   → creates a REAL_FACE group, returns an `h5_link`.
 *                               Show it to the user as a QR / URL. They scan it
 *                               on their phone and do a ~1-minute liveness check
 *                               (nod + blink). The link expires in 120s; call
 *                               init again with the same group_id to refresh.
 *   2. action="status" (FREE) → poll the group until status === "active" (the
 *                               person finished the phone liveness). Bounded
 *                               poll (~24s) so a quick scan resolves in one call.
 *   3. action="enroll" ($0.01)→ uploads a face photo (public https URL), waits
 *                               for the biometric match, returns the `ta_xxx`
 *                               asset id. Pre-flights group-active (425 if not);
 *                               no charge if the upload/match fails.
 *   action="list" (FREE)      → lists the wallet's enrolled RealFace assets.
 *
 * Use the returned `ta_xxx` as `real_face_asset_id` on a VideoGen call with a
 * Seedance 2.0 model for cross-frame character consistency.
 *
 * x402 signing mirrors src/tools/videogen.ts / blockrun.ts (kept as copy-paste
 * per the same rationale documented there — a shared module is out of scope).
 */
import type { CapabilityHandler } from '../agent/types.js';
export declare const realFaceCapability: CapabilityHandler;
