/** * Los argumentos que manda el modelo, convertidos a los campos del nodo. * * ## Para qué (2026-09-26) * * Un toolkit tiene que correr «como si fuera single operation» (Ariel): la * misma ejecución, con lo que el modelo pide en vez de lo guardado. Cada * toolkit declara qué campo rellena cada parámetro (`*_TOOLKIT_CAMPOS`) y * esto hace la conversión en un solo sitio, para que la api y hw-nodes —que * son gemelos— no la escriban cada uno a su manera. * * El esquema MCP sólo admite `string`, `number` y `boolean`, así que las * listas llegan separadas por comas y lo estructurado como JSON en texto; * pero hay modelos que mandan el array o el objeto ya hechos, y se aceptan * los dos. Lo que no se puede convertir se devuelve como error con el nombre * del parámetro, porque lo lee el modelo y es lo que necesita para * corregirse. * * Los argumentos son LITERALES: nada de plantillas. Un `{{payload.x}}` o un * `$('Nodo')` escrito por el modelo no se resuelve — dejaría leer la salida * de cualquier otro nodo del flujo. */ export type ConversionDeCampo = 'texto' /** * Texto que se escribe tal cual: sin `trim` y con `''` como valor de verdad * (sólo falta si no vino). [2026-10-03] Para el contenido de un fichero, * donde importan los bytes: `texto` le quitaba el salto de línea final y la * sangría de la primera línea, y un fichero vacío (`.gitkeep`) no se podía * crear porque `''` contaba como «no vino». */ | 'textoTalCual' | 'numero' | 'booleano' | 'lista' | 'json' /** Minutos que mira un informe de tiempo real (1–30) → «desde hace N-1». */ | 'minutos'; export interface CampoDeToolkit { /** La clave en el nodo. Con punto, anidada (`location.country`). */ campo: string; como: ConversionDeCampo; /** El valor del nodo es también el máximo que el modelo puede pedir. */ tope?: true; } /** * Cuántos caracteres de una respuesta vuelven al modelo por llamada, si el * nodo no dice otra cosa, y entre qué límites lo puede cambiar el dueño. Los * de Bucket (el contenido de un fichero) y Apify (los items de un dataset); * Firecrawl tiene los suyos, por página, con los mismos números. */ export declare const TOOLKIT_MAX_CHARS_POR_DEFECTO = 20000; export declare const TOOLKIT_MAX_CHARS_MINIMO = 1000; export declare const TOOLKIT_MAX_CHARS_MAXIMO = 200000; export interface CamposConvertidos { /** Por clave del nodo (con punto si es anidada), sólo lo que vino. */ valores: Record; /** Un mensaje por parámetro que no se pudo convertir. */ errores: string[]; } /** * Convierte los argumentos presentes según el mapa. Lo que el modelo no * mandó no aparece en `valores`: quien llama pone el del nodo. */ export declare function camposDesdeArgumentos(mapa: Readonly>, args: Readonly>): CamposConvertidos; /** * Escribe los valores convertidos sobre una copia plana del nodo, creando lo * anidado (`location.country`). No muta la de entrada. */ export declare function aplicarCampos(base: Readonly>, valores: Readonly>): Record; /** * Aplica los topes: donde el mapa dice `tope`, lo que pide el modelo no pasa * del valor del nodo. Devuelve los ajustados, para decírselo al modelo. */ export declare function aplicarTopes(mapa: Readonly>, valores: Record, nodo: Readonly>): string[];