00:00:00Cloudflow está trabajando en algo llamado Artifacts, un sistema de archivos distribuido que es
00:00:05compatible con Git y está diseñado principalmente para agentes, permitiéndote crear, bifurcar
00:00:10o eliminar miles de repositorios de forma programática, sin importar su tamaño, para tareas como
00:00:15revisiones de PR en paralelo, refactorización automatizada de grandes bases de código y espacios de trabajo por sesión.
00:00:20Pero, al estar construido sobre objetos duraderos (durable objects), ¿significa esto que tienes que usar JavaScript
00:00:25y no puedes acceder a un comando de shell para ejecutar Git?
00:00:28¡Dale a suscribir y averigüémoslo!
00:00:33GitHub fue creado para humanos, no para agentes, lo que significa que no necesitan ninguna de las funciones
00:00:37sociales como seguidores o discusiones, pero los agentes son muy buenos con Git, está en sus
00:00:42datos de entrenamiento.
00:00:43Así que Cloudflare ha construido una implementación básica de Git en Zig, la compiló a Wasm y la puso en un
00:00:49objeto duradero para que actúe como servidor Git.
00:00:52Mientras tanto, el cliente en sí puede ser lo que quieras, como un worker usando isomorphic Git
00:00:57dentro de un worker o usando el protocolo Git e incluso el cliente HTTP para que puedas conectarte
00:01:03a él para cosas que no usan JavaScript.
00:01:05Ahora, lamentablemente, al momento de grabar esto, no tengo acceso a Artifacts porque está
00:01:10en beta privada, pero hay mucha documentación al respecto, lo que significa que puedo crear una demo con
00:01:15código de esa documentación y tal vez, cuando se lance la versión beta pública, puedas comprobar
00:01:19si mi código realmente funciona.
00:01:20Así que lo que vamos a hacer es construir una herramienta que tome una lista de tareas para un repositorio específico
00:01:24y ejecute todas esas tareas en paralelo bifurcando el repositorio varias veces y ejecutando
00:01:29cada tarea en su propio artefacto dentro de un repositorio en la nube, en un objeto duradero.
00:01:34Veamos cómo funciona.
00:01:35He comenzado siguiendo la documentación de Artifacts en la guía de inicio para workers,
00:01:39así que usé este comando y este texto después del comando es solo el nombre del proyecto
00:01:44y puede ser cualquiera.
00:01:45Así que seguí todos estos pasos, lo que me dio este código de worker básico.
00:01:49Y los workers para Artifacts son un poco más eficientes que usar la API REST, ya que
00:01:53hacen menos viajes de ida y vuelta.
00:01:55Después de eso, necesitarás agregar los enlaces (bindings) de Artifacts a tu archivo wrangle.jsonc o toml,
00:02:00y luego volver a ejecutar los tipos.
00:02:02Ahora, la documentación aquí se centra en crear un repositorio nuevo, por lo que utiliza el enlace de Artifacts
00:02:07con el método create y un nombre de repositorio.
00:02:09Crea el nombre, lo que le da el token y el remoto.
00:02:13Así que el remoto es la ubicación del artefacto y el token o token de autenticación también es necesario
00:02:17para darte acceso a él.
00:02:18Y, por supuesto, puedes usar el protocolo git usando el remoto y el token para interactuar
00:02:22con tu artefacto.
00:02:23Pero vamos a hacer algo diferente.
00:02:25En lugar de crear un repositorio nuevo en un objeto duradero de Artifacts, primero vamos
00:02:29a verificar si existe uno llamado baseline.
00:02:31Luego, si no existe, lo que haremos es importar un repositorio git y luego le he
00:02:35dado el nombre de baseline y devuelto ese valor aquí.
00:02:39Y, por supuesto, si revisas la documentación de la API para el enlace de workers, verás más
00:02:43parámetros que se pueden añadir al método import.
00:02:45Pero después de haber devuelto el repositorio existente, podemos hacer cosas muy geniales
00:02:49con él.
00:02:50Aquí están las tareas que me gustaría realizar en el repositorio y, por supuesto, las he codificado
00:02:53de forma fija, pero estas podrían añadirse en una entrada o algún tipo de interfaz de usuario.
00:02:56Y aquí, dentro de la exportación predeterminada del worker, tengo el SDK de Anthropic, así como mi
00:03:00repositorio baseline.
00:03:02Y voy a recorrer todas las tareas y, aquí, estoy bifurcando el repositorio con
00:03:06este nombre.
00:03:07Luego tenemos esta función, que explicaré más adelante, pero esto ejecuta la tarea dentro
00:03:10del repositorio bifurcado y hace que el agente realice el cambio mientras devuelve el resumen del agente.
00:03:15Así que lo último que dijo el agente, y después de cada bucle for, devuelvo esta
00:03:19información.
00:03:20Voy a incluir el nombre de la tarea, el nombre de la bifurcación, el remoto y el token
00:03:23para que podamos acceder a ellos cuando queramos ver si el cambio es bueno y el resumen
00:03:27de lo que se hizo.
00:03:28Así que ahora mismo, los enlaces de los workers no te dan la capacidad de hacer pull, commit y push.
00:03:33Así que en mi código, he tenido que hacer eso con isomorphic-git y luego usar un sistema de almacenamiento
00:03:38en memoria para guardar los cambios temporalmente.
00:03:39Así que, volviendo al código del agente, estamos creando nuestro sistema de archivos en memoria, y luego tenemos
00:03:43un mensaje del sistema que le dice al agente que haga los cambios relevantes y luego confirme (commit) su
00:03:47código.
00:03:48Así que vamos a clonar el repositorio bifurcado usando el remoto que se ha proporcionado, así como
00:03:51el token.
00:03:52Y luego definimos algunas herramientas, como leer, escribir y confirmar (commit).
00:03:55Aquí seleccionamos el modelo y le damos un mensaje del sistema, y luego pasamos la tarea
00:03:59como mensaje de usuario.
00:04:00Y el resto del código es tu bucle agéntico estándar.
00:04:02Entonces, si hay una llamada a una herramienta, deja de razonar y ejecuta la llamada a la herramienta, en nuestro caso, leer, escribir
00:04:07o confirmar, que también hace push del código después de confirmar.
00:04:10Y la ventaja de tener un artefacto es que todo este código existirá en el objeto duradero,
00:04:14almacenado en la base de datos SQLite del objeto, y si el objeto duradero se cae, la información
00:04:20puede recuperarse de la base de datos SQLite en cualquier momento si vuelve a estar disponible.
00:04:23Y luego, aquí abajo, continuamos con el razonamiento del modelo después de la llamada a la herramienta antes de devolver
00:04:27el último mensaje del modelo.
00:04:29Ahora sé que es muy difícil visualizar todo esto sin que yo pueda
00:04:32ejecutar el código, pero espero que puedas ver lo que se puede hacer con los artefactos y
00:04:37su máximo potencial.
00:04:38Imagina si pudieras tener una interfaz de usuario para ver todos los cambios que están ocurriendo en estos artefactos
00:04:42y pudieras comunicarte con agentes individuales o con un agente orquestador único para realizar cambios
00:04:46en los diferentes repositorios.
00:04:48Hablando de un agente orquestador, podríamos tener un solo worker que pudiera orquestar
00:04:52todos estos cambios y fusionarlos en el repositorio principal después de que un agente revisor haya
00:04:56revisado el código.
00:04:57Incluso podemos combinar artefactos con workers dinámicos para que los agentes puedan ejecutar el código que han
00:05:02cambiado para ver si funciona.
00:05:03Y si no es código JavaScript, podemos usar entornos sandbox de Cloudflare para ejecutar cualquier lenguaje
00:05:07que queramos e incluso ejecutar comandos de shell.
00:05:09Sin mencionar que existe la opción de navegador de Cloudflare que ejecuta un navegador Puppeteer para que el
00:05:13modelo pueda mirar y ver si el código que implementó es correcto si es un cambio de front-end.
00:05:18Honestamente, me he divertido mucho pensando en las posibilidades de los artefactos, aunque
00:05:21todavía no pueda ejecutarlos.
00:05:22Pero una cosa que he notado es que no existe un comando git diff.
00:05:25No está expuesto en la API de enlaces de worker ni en isomorphic git.
00:05:30Así que tal vez la única forma de hacer un git diff es a través del protocolo git, o podrían añadirlo en el
00:05:35futuro.
00:05:36De todos modos, en este momento, si quieres hacerlo sin usar el protocolo git, supongo que podrías usar
00:05:40isomorphic git usando git log para encontrar el árbol git, recorrerlo y caminar por él para
00:05:45comparar las diferencias.
00:05:46De todos modos, creo que este es un lanzamiento muy genial de Cloudflare.
00:05:50Y aunque ya existen otras herramientas de sistemas de archivos como S3 files, ZeroFS y JuiceFS que
00:05:55ya existen, no creo que estas opciones sean compatibles con git, lo cual es una característica muy genial
00:05:59y más amigable para los agentes.
00:06:01Hablando de S3, si alguna vez has querido ejecutarlo localmente en tu máquina, entonces echa
00:06:05un vistazo a este video de Josh que te explica exactamente cómo hacerlo.