/** * El nodo de Outlook como AI toolkit: sus operaciones como herramientas que * un AI Node, un servidor MCP o un agente de voz pueden llamar. * * ## Lo decidido (2026-09-30) * * - **Las diecisiete**, una herramienta por operación, como WooCommerce y * Shopify: sin «Find emails» el modelo no sabe qué `message_id` contestar. * - **Nace bloqueada** «borrar correo»: es la única que hace desaparecer * algo, y con `permanent` no se recupera. Es el mismo criterio que Ariel * eligió para los borrados de Bucket (`delete_object`) y de Airtable * (`delete_record`). El dueño la desbloquea en el nodo. * - **Los adjuntos no entran**: son ficheros del payload del flujo, y un * modelo no tiene ninguno que pasar. Van con nombre en `OUTLOOK_TOOLKIT_FUERA`. * * ## La v2 (2026-09-30, noche) * * - **Entra** «List categories» (`list_outlook_categories`): sin ella el * modelo inventa nombres de categoría al etiquetar. * - **No entran** «Send and wait» —por esa vía no espera: el modelo recibe * algo en el acto y acaba diciendo que ya se aprobó, como en Gmail— ni * «Download attachments», que produce ficheros para el FLUJO y a un modelo * no le sirven de nada. Van con su motivo en * `OUTLOOK_OPERACIONES_SIN_HERRAMIENTA`. * * ## El esquema * * Sólo `string`, `number` y `boolean` (lo que admite MCP): los destinatarios * y las categorías, separados por comas. */ import type { CampoDeToolkit } from './argumentos-de-toolkit.js'; import type { OutlookOperation } from './outlook-operations.js'; /** Las operaciones que NO son herramienta, cada una con su motivo. */ export declare const OUTLOOK_OPERACIONES_SIN_HERRAMIENTA: Readonly<{ readonly sendAndWaitForResponse: "Por esa vía no espera: el modelo recibe algo en el acto y acaba diciendo que ya se aprobó."; readonly downloadAttachments: "Guarda ficheros para el nodo siguiente del flujo; a un modelo no le sirven."; }>; export type OutlookToolkitOperation = Exclude; export interface OutlookToolkitParameter { name: string; type: 'string' | 'number' | 'boolean'; description: string; required: boolean; } export interface OutlookToolkitSpec { operation: OutlookToolkitOperation; label: string; toolName: string; description: string; parameters: OutlookToolkitParameter[]; destructive?: boolean; /** Nace bloqueada en el nodo; el dueño la desbloquea. Ver `toolkits.ts`. */ bloqueadaPorDefecto?: boolean; } export declare const OUTLOOK_TOOLKIT_SPECS: OutlookToolkitSpec[]; export declare const OUTLOOK_TOOLKIT_SPECS_BY_TOOL_NAME: Readonly>; export declare const OUTLOOK_TOOLKIT_CAMPOS: Readonly>>>; /** Los campos de single operation que el toolkit NO expone, y por qué. El * test de paridad los salta con nombre, no en silencio. */ export declare const OUTLOOK_TOOLKIT_FUERA: Readonly>;