00:00:00Cloudflow travaille sur quelque chose appelé Artifacts, un système de fichiers distribué qui est
00:00:05compatible Git, conçu d'abord pour les agents, et qui vous permet de créer, forker
00:00:10ou supprimer par programmation des milliers de dépôts, peu importe leur taille, pour des choses comme
00:00:15les revues de PR parallèles, la refactorisation automatisée de larges bases de code et des espaces de travail par session pour les agents.
00:00:20Mais comme c'est construit sur des objets durables (durable objects), cela signifie-t-il que vous devez utiliser JavaScript
00:00:25et que vous ne pouvez pas avoir accès à une commande shell pour exécuter Git ?
00:00:28Abonnez-vous et découvrons-le !
00:00:33GitHub a été conçu pour les humains, pas pour les agents, ce qui signifie qu'ils n'ont pas besoin des aspects
00:00:37sociaux, comme les abonnés ou les discussions, mais les agents sont très bons avec Git, c'est dans leur
00:00:42données d'entraînement.
00:00:43Cloudflare a donc construit une implémentation Git basique en Zig, l'a compilée en Wasm et l'a placée sur un
00:00:49objet durable pour agir comme un serveur Git.
00:00:52Pendant ce temps, le client lui-même peut être ce que vous voulez, comme un worker utilisant isomorphic-git
00:00:57à l'intérieur d'un worker ou utilisant le protocole Git, et même le client HTTP, afin que vous puissiez vous connecter
00:01:03à lui pour des choses qui n'utilisent pas JavaScript.
00:01:05Malheureusement, au moment de l'enregistrement, je n'ai pas accès à Artifacts car c'est
00:01:10en bêta privée, mais il y a beaucoup de documentation dessus, ce qui signifie que je peux créer une démo avec
00:01:15le code issu de cette documentation, et peut-être que lorsqu'il sortira en bêta publique, vous pourrez vérifier
00:01:19si mon code fonctionne vraiment.
00:01:20Ce que nous allons faire, c'est construire un outil qui prend une liste de tâches pour un dépôt
00:01:24spécifique et exécute toutes ces tâches en parallèle en forkant le dépôt plusieurs fois et en exécutant
00:01:29chaque tâche sur son propre artefact dans un dépôt Cloud sur un objet durable.
00:01:34Voyons comment cela fonctionne.
00:01:35J'ai commencé par suivre la documentation d'Artifacts pour démarrer avec les workers,
00:01:39donc j'utilise cette commande, et le texte ici après cette commande est juste le nom du projet
00:01:44et peut être n'importe quoi.
00:01:45J'ai donc suivi toutes ces étapes, ce qui finit par me donner ce code de worker de base.
00:01:49Et les workers pour Artifacts sont légèrement plus performants que l'utilisation de l'API REST car ils
00:01:53font moins d'allers-retours.
00:01:55Ensuite, vous devrez ajouter les liaisons (bindings) Artifacts à votre fichier wrangle.jsonc ou toml,
00:02:00puis relancer les types.
00:02:02La documentation ici se concentre sur la création d'un nouveau dépôt, elle utilise donc la liaison Artifacts
00:02:07avec la méthode create et un nom de dépôt.
00:02:09Cela crée le nom, ce qui donne le jeton (token) et le remote.
00:02:13Le remote est donc l'emplacement de l'artefact, et le jeton ou jeton d'authentification est nécessaire
00:02:17pour vous donner accès à celui-ci.
00:02:18Et bien sûr, vous pouvez utiliser le protocole Git en utilisant le remote et le jeton pour interagir
00:02:22avec votre artefact.
00:02:23Mais nous allons faire quelque chose de différent.
00:02:25Au lieu de créer un tout nouveau dépôt dans un objet durable Artifacts, nous allons d'abord
00:02:29vérifier s'il en existe un appelé baseline.
00:02:31S'il n'existe pas, nous allons importer un dépôt Git, puis je lui ai donné
00:02:35le nom de baseline et ensuite retourné cette valeur ici.
00:02:39Bien sûr, si vous consultez la documentation de l'API pour la liaison des workers, vous verrez plus
00:02:43de paramètres qui peuvent être ajoutés à la méthode import.
00:02:45Mais une fois que nous avons retourné le dépôt existant, nous pouvons faire des choses très intéressantes
00:02:49avec lui.
00:02:50Voici donc les tâches que j'aimerais effectuer sur le dépôt, et bien sûr je les ai codées en dur,
00:02:53mais elles pourraient être ajoutées via une entrée ou une sorte d'interface utilisateur.
00:02:56Et ici, à l'intérieur de l'export par défaut du worker, j'ai le SDK Anthropic ainsi que mon
00:03:00dépôt baseline.
00:03:02Je vais boucler sur toutes les tâches et ici, je fork le dépôt avec
00:03:06ce nom.
00:03:07Ensuite, nous avons cette fonction, que je détaillerai plus tard, mais elle exécute la tâche dans
00:03:10le dépôt forké et demande à l'agent d'effectuer le changement tout en retournant le résumé de l'agent.
00:03:15Donc, la dernière chose que l'agent a dite, et après chaque boucle for, je retourne cette
00:03:19information.
00:03:20Je vais donner le nom de la tâche, le nom du fork, le remote et le jeton
00:03:23afin que nous puissions y accéder quand nous voulons voir si le changement est bon, ainsi que le résumé
00:03:27de ce qui a été fait.
00:03:28Pour l'instant, les liaisons des workers ne vous donnent pas la possibilité de faire pull, commit et push.
00:03:33Dans mon code, j'ai donc dû faire cela avec isomorphic-git, puis utiliser un système de stockage
00:03:38en mémoire pour stocker les changements temporairement.
00:03:39Donc, de retour dans le code de l'agent, nous créons notre système de fichiers en mémoire, et ensuite nous avons
00:03:43un prompt système qui dit à l'agent d'effectuer les changements pertinents et ensuite de committer leur
00:03:47code.
00:03:48Nous allons donc cloner le dépôt forké en utilisant le remote qui a été fourni ainsi que
00:03:51le jeton.
00:03:52Et ensuite nous définissons des outils : lire, écrire et committer.
00:03:55Ici, nous sélectionnons le modèle et lui donnons un prompt système, puis nous passons la tâche
00:03:59en tant que message utilisateur.
00:04:00Et le reste du code est votre boucle agentique standard.
00:04:02S'il y a un appel d'outil, on arrête le raisonnement et on exécute l'outil, dans notre cas, lire, écrire
00:04:07ou committer, ce qui se charge aussi de pusher le code après le commit.
00:04:10Et l'avantage d'avoir un artefact est que tout ce code existera dans l'objet durable,
00:04:14stocké dans la base de données SQLite de l'objet, et si l'objet durable s'arrête, l'information
00:04:20peut être récupérée depuis la base de données SQLite à tout moment si elle revient en ligne.
00:04:23Et ensuite ici, nous continuons le raisonnement du modèle après l'appel d'outil avant de retourner
00:04:27le dernier message du modèle.
00:04:29Je sais qu'il est très difficile de visualiser tout cela sans que je puisse
00:04:32exécuter le code, mais j'espère que vous pouvez entrevoir ce qui peut être fait avec les artefacts et
00:04:37leur plein potentiel.
00:04:38Imaginez si vous pouviez avoir une interface pour voir tous les changements qui se produisent dans ces artefacts
00:04:42et que vous pouviez communiquer avec des agents individuels ou un agent orchestrateur unique pour effectuer des changements
00:04:46sur les différents dépôts.
00:04:48En parlant d'agent orchestrateur, nous pourrions avoir un seul worker capable d'orchestrer
00:04:52tous ces changements et de les fusionner dans le dépôt principal après qu'un agent relecteur a
00:04:56vérifié le code.
00:04:57Nous pouvons même combiner les artefacts avec des workers dynamiques afin que les agents puissent exécuter le code qu'ils ont
00:05:02changé pour voir s'il fonctionne.
00:05:03Et si ce n'est pas du code JavaScript, alors nous pouvons utiliser les sandboxes de Cloudflare pour exécuter n'importe quel langage
00:05:07que nous voulons et même exécuter des commandes shell.
00:05:09Sans parler de l'option de navigateur Cloudflare qui exécute un navigateur Puppeteer pour que le
00:05:13modèle puisse regarder et voir si le code implémenté est correct s'il s'agit d'un changement front-end.
00:05:18J'ai honnêtement pris beaucoup de plaisir à réfléchir aux possibilités des artefacts, même si
00:05:21je ne peux pas encore les exécuter.
00:05:22Mais une chose que j'ai remarquée, c'est qu'il n'y a pas de commande git diff.
00:05:25Elle n'est pas exposée dans l'API des liaisons des workers ni dans isomorphic-git.
00:05:30Donc peut-être que la seule façon de faire un git diff est via le protocole Git, ou ils pourraient l'ajouter dans le
00:05:35futur.
00:05:36Quoi qu'il en soit, à l'heure actuelle, si vous voulez le faire sans utiliser le protocole Git, je suppose que vous pourriez utiliser
00:05:40isomorphic-git en utilisant git log pour trouver l'arborescence Git, puis parcourir l'arbre pour
00:05:45comparer les différences.
00:05:46Quoi qu'il en soit, je pense que c'est une version très intéressante de Cloudflare.
00:05:50Et même s'il existe déjà d'autres outils de système de fichiers comme S3 files, ZeroFS et JuiceFS,
00:05:55je ne pense pas que ces options soient compatibles avec Git, ce qui est une fonctionnalité très cool
00:05:59et plus adaptée aux agents.
00:06:01En parlant de S3, si vous avez toujours voulu l'exécuter localement sur votre machine, alors consultez
00:06:05cette vidéo de Josh qui vous explique exactement comment faire cela.