/** * First managed execute after Clerk Authorize / session mint. * * Activation is a successful POST /v1/execute, not an install and not whoami. * Both CLI `completeFirstExecute` and Convex `activation.completeFirstExecute` * walk this list in order and stop on the first HTTP 200. * * Default winner: NASA APOD (`nasa` / `apod`). * Why: research-shaped (today's astronomy picture), customer-executable, * verified zero-cost so a new workspace with no card can land first_call. * Brave / Serper / Firecrawl are also research-shaped but billed * ($0.005 / $0.001 / $0.02) and `evaluateManagedUsage` returns * `payment_required` without a card — they cannot activate a free user. * Sep 20 target is activated workspaces, not PAYG. * * Fallback: Frankfurter latest (`frankfurter` / `latest`, path `/latest`). * Why: workspace-public, no key, proven zero-cost. The live catalog base is * `https://api.frankfurter.dev/v1`; joining `/latest` pins to * `/v1/latest` (200, no redirect). `api.frankfurter.app` 301s and the * gateway uses redirect:error, so that old host must not be used here. * FX is less "research" than search, but first_call still lands if NASA * is down or the managed NASA key is missing. * * Catalog display names without a slash (CoinGecko) must never be used — * the CLI maps those to legacy POST /v1/call. */ export declare const FIRST_EXECUTE_PATH = "/v1/execute"; export declare const FIRST_EXECUTE_NASA: { readonly provider: "nasa"; readonly action: "apod"; readonly params: Record; }; export declare const FIRST_EXECUTE_FRANKFURTER: { readonly provider: "frankfurter"; readonly action: "latest"; readonly params: Record; }; export declare const FIRST_EXECUTE_RAILS: readonly [{ readonly provider: "nasa"; readonly action: "apod"; readonly params: Record; }, { readonly provider: "frankfurter"; readonly action: "latest"; readonly params: Record; }]; /** Research-shaped managed providers that require a card. Not first-execute rails. */ export declare const FIRST_EXECUTE_BILLED_RESEARCH_PROVIDERS: readonly ["brave_search", "serper", "firecrawl"]; export type FirstExecuteAttempt = { provider: string; action: string; params: Record; }; export declare function formatApodTitle(body: unknown): string | undefined; export declare function formatFrankfurterRate(body: unknown): string | undefined; export declare function formatFirstCallResult(provider: string, body: unknown): string | undefined; export declare function firstExecuteFallbackSummary(provider: string): string; export declare function isFirstExecuteSuccess(status: number, body: unknown): boolean; //# sourceMappingURL=first-execute-rails.d.ts.map