/** * 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;