/** * Los nombres de las herramientas del toolkit de Social Media, para «Block * these tool calls» [2026-10-06]. * * ## Por qué sólo los nombres * * Social es el único toolkit cuyas herramientas no viven en este paquete: la * api y hw-nodes las arman por nodo desde su registro de proveedores * (`social-providers/toolkit-bridge.ts`), una por red y operación * (`bluesky_postText`) y, en un crosspost, además la que publica en todas * (`crosspost_publish`). Sus campos dependen de cada red y los usa el * proveedor al publicar, así que mudarlas enteras sería mudar el registro. * * Para bloquear basta con menos —lo que preguntan el DTO, la puerta de node-sdk, * el AI Node y el panel—: * * - qué nombres existen, para que un nombre mal escrito sea un 400 y no un * bloqueo que no bloquea nada ({@link NOMBRES_DE_HERRAMIENTAS_SOCIALES}); * - a qué herramienta corresponde lo que llega en `operation` * ({@link herramientaSocialDe}): en un nodo de una sola red el AI Node y * MCP mandan la operación sola (`postText`), y en un crosspost el nombre * entero (`twitter_postText`). * * [2026-10-20, #270] `post` es la operación de publicar de todas las redes y * va la primera; `postText`, `postWithMedia` y `postWithCW` siguen aquí porque * siguen siendo operaciones válidas (alias, ver `post-social.ts`): las listas * de bloqueo guardadas y los clientes MCP las nombran, y el DTO no las limpia. * * ⚠️ {@link SOCIAL_OPERACIONES_POR_RED} es una COPIA de lo que el registro * ofrece hoy. La atan `el-bloqueo-social-conoce-cada-red.spec.ts` (gemelo en * la api y hw-nodes), que la compara con lo que el registro arma de verdad: una * red u operación nueva allí sin su línea aquí pone el spec en rojo. * * Ninguna nace bloqueada: Ariel no lo decidió para Social, y el bloqueo de hoy * es opcional. */ /** Las operaciones de cada red en modo toolkit, en el orden del registro. */ export declare const SOCIAL_OPERACIONES_POR_RED: Readonly>; /** La herramienta de un crosspost que publica en todas sus redes de una vez, * y la operación con la que la nombra MCP. Mismos valores que * `CROSSPOST_FANOUT_TOOL` / `CROSSPOST_FANOUT_OP` de la api. */ export declare const HERRAMIENTA_DEL_ABANICO_SOCIAL = "crosspost_publish"; export declare const OPERACION_DEL_ABANICO_SOCIAL = "publish"; /** El nombre de la herramienta de una operación de una red: `bluesky_postText`. */ export declare function herramientaSocial(red: string, operacion: string): string; /** Todos los nombres que puede tener una herramienta de Social: lo único que * su `blockedTools` acepta. */ export declare const NOMBRES_DE_HERRAMIENTAS_SOCIALES: readonly string[]; /** * Las que nacen bloqueadas (decisión de Ariel, 2026-10-07): borrar un post en * cada red y `crosspost_publish`, que publica en todas a la vez. Lo que no se * deshace o llega a todas partes de golpe no lo decide un modelo sin que el * dueño lo haya querido; el dueño las desbloquea en «Block these tool calls». * Como `crawl_site` de Firecrawl: valen mientras el nodo no guarde su lista. */ export declare const HERRAMIENTAS_SOCIALES_BLOQUEADAS_DE_SERIE: readonly string[]; /** * La herramienta (`bluesky_postText`) a la que corresponde lo que llega en * `operation` a un nodo de Social. * * - Un nombre entero se queda como está: es lo que manda el AI Node en un * crosspost y lo que recibe MCP. * - En un nodo de una red, la operación sola (`postText`, lo que guarda el * AI Node en `operationOverride` y lo que inyecta MCP) lleva delante su red. * - En un crosspost, `publish` es la que publica en todas. Otra operación * suelta no dice a qué red va —el nodo la rechaza al correr—, así que se * devuelve tal cual y no casa con ningún nombre bloqueado. */ export declare function herramientaSocialDe(entidad: unknown, operacionONombre: string): string;