/** * El nodo Firecrawl como AI toolkit: sus cuatro modos —scrape, crawl, search * y map— como herramientas que un AI Node, un servidor MCP o un agente de voz * pueden llamar. * * ## Qué pidió Ariel (2026-09-26) * * «Exponer todos los endpoints… no quiero dejar nada afuera del Firecrawl»: * cada herramienta lleva TODAS las opciones que el nodo tiene en single * operation (las de la v2, que es con lo que corre en modo toolkit), con el * nombre de la API en snake_case. Y: * * - `crawl_site` entra BLOQUEADA por defecto — tarda minutos y gasta un * crédito por página —, y el dueño la desbloquea en el nodo * (`bloqueadaPorDefecto`, ver `toolkits.ts`). * - Decide el LLM (2026-09-27, el mismo criterio que RSS: «que le diga al * LLM lo que quiere y el LLM resuelva»). Lo guardado en single operation * no cuenta en modo toolkit: los defectos son fijos * ({@link FIRECRAWL_TOOLKIT_DEFECTOS}) y lo que cuesta créditos o tiempo * tiene un tope fijo ({@link FIRECRAWL_TOOLKIT_TOPES}). Hasta ese día el * defecto y el tope eran los del nodo, y el dueño los llenaba en «Settings». * - Si el nodo tiene dominios permitidos, sólo se lee de ellos. * - Lo que vuelve al modelo se recorta a 20.000 caracteres por página. * * Los cuatro se hacen en el servicio; aquí sólo se describen, para que el * modelo sepa que existen. * * ## El esquema * * Sólo `string`, `number` y `boolean` (lo que admite MCP): las listas van * separadas por comas y el esquema de extracción como JSON en un `string`. */ import type { CampoDeToolkit } from './argumentos-de-toolkit.js'; export type FirecrawlToolkitOperation = 'scrape' | 'crawl' | 'search' | 'map'; export interface FirecrawlToolkitParameter { name: string; type: 'string' | 'number' | 'boolean'; description: string; required: boolean; } export interface FirecrawlToolkitSpec { operation: FirecrawlToolkitOperation; label: string; toolName: string; description: string; parameters: FirecrawlToolkitParameter[]; destructive?: boolean; /** Nace bloqueada en el nodo; el dueño la desbloquea. Ver `toolkits.ts`. */ bloqueadaPorDefecto?: boolean; } /** * Lo que se le devuelve al modelo por página, como mucho, si el nodo no dice * otra cosa (`maxCharsPerPage`, 2026-09-26: Ariel pidió «20.000 por default, * pero que lo puedan cambiar ellos»). */ export declare const FIRECRAWL_TOOLKIT_MAX_CHARS_POR_PAGINA = 20000; /** El tope que el dueño puede poner, entre estos dos. Por debajo una página no * dice nada; por encima una sola llamada llena el contexto de muchos modelos * (~4 caracteres por token: 200.000 son unos 50.000 tokens). */ export declare const FIRECRAWL_TOOLKIT_MAX_CHARS_MINIMO = 1000; export declare const FIRECRAWL_TOOLKIT_MAX_CHARS_MAXIMO = 200000; /** Los formatos que el nodo sabe pedir (los mismos que la pantalla). */ export declare const FIRECRAWL_FORMATOS: readonly ["markdown", "html", "rawHtml", "links", "images", "summary", "screenshot", "json"]; /** Las fuentes de búsqueda de la API v2. */ export declare const FIRECRAWL_FUENTES: readonly ["web", "news", "images"]; /** * Lo que usa cada herramienta cuando el modelo no lo dice. Fijo desde el * 2026-09-27: en modo toolkit no cuenta lo guardado en el nodo. Son los mismos * valores con los que nace un nodo en single operation. */ export declare const FIRECRAWL_TOOLKIT_DEFECTOS: Readonly>; /** * Lo más que puede pedir el modelo en lo que cuesta créditos o tiempo. Fijo * desde el 2026-09-27 (antes, el valor del nodo). `crawl_site` además nace * bloqueada. */ export declare const FIRECRAWL_TOOLKIT_TOPES: Readonly>; export declare const FIRECRAWL_TOOLKIT_SPECS: FirecrawlToolkitSpec[]; export declare const FIRECRAWL_TOOLKIT_SPECS_BY_TOOL_NAME: Readonly>; export declare const FIRECRAWL_TOOLKIT_CAMPOS: Readonly>>>; /** Los campos de la entidad que no son de una herramienta sino del nodo: * qué modo corre, con qué credencial, y cuándo dispara en un flujo. */ export declare const FIRECRAWL_CAMPOS_DEL_NODO: readonly ["mode", "credentialId", "triggerOn"];