𝗧𝗵𝗲 𝗗𝗮𝗻𝗴𝗲𝗿 𝗼𝗳 𝗦𝗶𝗹𝗲𝗻𝘁 𝗙𝗮𝗶𝗹𝘂𝗿𝗲𝘀 Usas herramientas para realizar el trabajo. Pero, ¿qué pasa si una herramienta devuelve la respuesta incorrecta sin un error? Esto es más peligroso que una herramienta que falla. Un error es una señal. Un fallo silencioso es una falsificación.
Encontré un error en mi herramienta de navegador. Devolvió "[object Promise]" como si fuera una página web. Busqué problemas similares y encontré 10 herramientas más con el mismo error. El problema no era una errata, sino una estructura. Esta estructura se había copiado por todo el código base.
El error ocurrió porque el do JavaScript de AppleScript es síncrono. Devuelve algo inmediatamente, sin esperar a que termine el trabajo asíncrono. Esto significa que si pasas una función asíncrona a do JavaScript, devolverá un objeto Promise, no el resultado de la función.
Para solucionar esto, moví el bucle asíncrono al lado de Node. Utilizo una función auxiliar para consultar el estado de la página mediante polling hasta que se estabilice, y luego leo el resultado. De esta manera, el await reside en Node, y la llamada a la página es una única expresión síncrona.
La lección es mantener el bucle asíncrono en el lado que pueda usar await, y consultar el estado observable a través de la frontera en lugar de intentar hacer un await a través de ella. No le pidas al puente que espere. Pregúntale, repetidamente, "¿ya terminaste?" — y haz la espera tú mismo.
Si estás construyendo herramientas para agentes, ten cuidado con los fallos silenciosos. Haz un grep en tu código base buscando herramientas que devuelvan "[object Promise]" o que actúen sobre un estado desactualizado. Si encuentras una, no te limites a arreglarla. Busca a sus "hermanas" y corrige la estructura que se copió.