/** * Node Connection Registry — THE single source of truth for what each node * type can receive from and send to. * * Used by: API (pipeline dispatch), Broker (agent wiring), Dashboard (canvas validation) * * Adding a new node type = add 1 entry here. All repos import from this package. */ import type { NodeType, NodeConnectionConfig } from './types.js'; /** * Los tipos del grupo «Actions» del registro —Slack, Mongo, HTTP… y el AI * Node—: lo que puede colgar DIRECTAMENTE de un Voice Agent. Ver * `DESTINOS_UNICOS`. * * Sale del registro y no de una lista a mano para que un nodo de acción nuevo * entre solo: una lista escrita aquí se habría quedado atrás en el primero. */ export declare const TIPOS_DE_ACCION: readonly NodeType[]; export declare const NODE_CONNECTIONS: Record; export declare function canReceiveFrom(targetType: NodeType, sourceType: NodeType): boolean; export declare function canReceiveFromNodes(nodeType: NodeType): boolean; export declare function canSendToNodes(nodeType: NodeType): boolean; export declare function isTerminal(nodeType: NodeType): boolean; export declare function isNodeType(type: string): type is NodeType; /** * Orígenes que SÓLO pueden conectarse a ciertos tipos, dicho a mano. * * ## Por qué (2026-09-24, Ariel) * * «Un chat trigger no tiene caso que tenga un flow control conectado * directamente — bloquearlo, y en el “+” también.» Medido en el motor: el Chat * Trigger ejecuta el PRIMER AI Node de sus salidas (`chat-triggers.service.ts`: * «v1 requires the chat path to end at an AI node»); cualquier otra cosa colgada * directamente de él —un router, un filter, pero también un Slack o un HTTP— * no corre nunca. Ariel eligió «sólo AI Node». * * ## ⚠️ Por qué no sale de `canOutputTo` * * Esas listas no las lee ningún repo por PARES y están desfasadas: `webhook → * ai` funciona sin que `ai` esté en `PROCESSING_OUTPUTS`. Convertirlas en * regla bloquearía conexiones que hoy valen. Esto es una lista corta y * deliberada, que el lienzo consulta en `canConnect` (el arrastre, los puntos * que se iluminan, el reconectar por clic y el menú «+»). * * ## El Voice Agent, sólo a acciones (2026-09-25, Ariel) * * «En el símbolo de más del voice node, desactiva los flow control, que nomás * puedan salir los actions.» Cada herramienta de flujo del agente de voz es UN * nodo conectado a él —la pestaña Tools las crea eligiendo ese nodo—, así que * lo que cuelga directamente del agente tiene que ser algo que HACE: un router * o un delay no tiene nada que ofrecerle como herramienta. El AI Node entra * (está en «Actions»), limitado a lo que contesta de una vez: sin sus propias * herramientas ni memoria; eso lo aplica el api al sincronizar y al llamar. * Lo que va DESPUÉS del nodo de acción sigue libre. */ export declare const DESTINOS_UNICOS: Readonly>>; /** ¿Puede salir una conexión de `origen` hacia `destino`, según * `DESTINOS_UNICOS`? Los orígenes que no están en la lista, sí a todo. */ export declare function destinoPermitido(origen: string, destino: string): boolean; /** All valid node type strings */ export declare const ALL_NODE_TYPES: NodeType[];