Agent Orchestrator 0.12.0

80 commits depuis la 0.11.2. L'app desktop parle désormais huit langues, repose sur une nouvelle palette de couleurs et permet d'épingler des sessions et de choisir un relecteur par session. L'app mobile gagne des thèmes et la dictée par appui maintenu. Les conteneurs lancés par une session sont nettoyés quand elle meurt.

Couvre tout ce qui a changé depuis la v0.11.2.

Sur macOS, passez directement à la 0.12.1 ou à une version ultérieure. Ce build provoque une fuite de descripteurs de fichiers et casse la vue Fichiers ainsi que la création de tâches après quelques heures d'utilisation.

La 0.11.0 consistait à vérifier que les fondations tenaient la charge. La 0.12.0, c'est ce qui a été construit dessus : l'app parle désormais huit langues, la barre latérale et les paramètres fonctionnent comme on s'y attend, et une catégorie de pannes capable d'effacer toutes les sessions de votre tableau a disparu.

Cette version ajoute de nouvelles capacités produit et des améliorations de fiabilité sans casser les workflows existants.

Points forts

L'app parle huit langues

L'app desktop dispose désormais d'une vraie couche de localisation, construite sur i18next, avec la langue choisie sous Settings > General et mémorisée dans ~/.ao/ui-settings.json. Le chinois simplifié est arrivé en premier et couvre la coque de l'app, la barre latérale, le tableau, les paramètres, les boîtes de dialogue, les onglets de l'inspecteur, la palette de commandes et les textes du terminal. Le japonais, le coréen, l'espagnol, le français, l'allemand et le portugais du Brésil ont suivi, avec un README dans chaque langue. L'anglais reste la langue par défaut et de repli : une chaîne non traduite s'affiche en anglais plutôt que sous forme de clé. (#3465, #3541)

Mobile : thèmes, feuilles natives et dictée par appui maintenu

L'app mobile n'est plus réservée au mode sombre. Elle propose des palettes claire et sombre ainsi qu'une préférence « système » qui suit vraiment l'OS au lieu de rester figée sur ce qu'elle a lu au lancement ; la coque de l'app a été reconstruite sur des feuilles natives, et le tableau des sessions se répartit selon l'arrêt du runtime plutôt que selon le statut terminé.

Elle propose aussi la dictée en push-to-talk. Maintenez la touche micro dans la zone de saisie pour parler, relâchez pour insérer, ou balayez vers le haut pour la verrouiller en mode mains libres. La reconnaissance s'exécute sur l'appareil (iOS SFSpeechRecognizer, Android SpeechRecognizer) : pas de clé API ni de coût à la minute, et elle privilégie le vocabulaire dont regorgent les prompts d'agents, pour obtenir « git » et « npm » plutôt que « get » et « MPM ». La transcription arrive dans la zone de saisie comme brouillon modifiable au lieu d'être envoyée, car la reconnaissance vocale comprend le code de travers assez souvent pour qu'un envoi silencieux soit risqué. Les prises successives s'ajoutent les unes aux autres : plusieurs appuis construisent un seul prompt.

S'y ajoutent une icône d'app Liquid Glass assortie à la version desktop, et une correction du port LAN par défaut, qui pointait vers le port du daemon accessible uniquement en loopback au lieu du pont mobile sur le port 3011 : une nouvelle installation ne pouvait pas se connecter sans modification manuelle. (#3399, #3400, #3304, #3494)

Une nouvelle base de couleurs

Le renderer est passé à une palette de design tokens oklch, avec Geist comme police d'interface et les alias de couleurs shadcn mappés dessus, à la place des valeurs codées en dur dans toute la bibliothèque de composants. Le statut des sessions dispose désormais d'une palette unique partout où il apparaît : en cours en bleu, vous attend en orange, en revue en jaune, prête en vert. (#3421)

Épinglez les sessions auxquelles vous revenez sans cesse

Les sessions peuvent être épinglées dans une section Pinned en haut de la barre latérale, enregistrée côté serveur pour que l'épingle survive à un redémarrage. La barre latérale elle-même devient repliable : Pinned et Projects se replient chacun, et un clic sur l'icône de dossier d'un projet le déplie ou le replie sans avoir à l'ouvrir d'abord. (#3511, #3310)

Choisissez le relecteur par session

L'agent de revue était auparavant un réglage unique pour tout le projet. Vous pouvez désormais en choisir un pour une session donnée, et cette passe ne modifie pas ce qu'utilisent les autres sessions du projet. L'onglet Revues liste aussi toutes les passes enregistrées pour la session, et pas seulement l'exécution actuelle et la précédente pour une PR, pour comparer ce qu'ont dit deux relecteurs différents. Une revue refusée, lorsque le daemon réutilise une passe existante au lieu d'en lancer une nouvelle, ne se présente plus comme un succès. (#3477)

Les Paramètres s'ouvrent dans une fenêtre modale

Les paramètres globaux et ceux du projet s'ouvrent par-dessus le tableau au lieu de le quitter, avec une barre latérale pour General, Updates, Developer et Help. Échap ou un clic à l'extérieur les ferme, et vous revenez là où vous étiez. (#3497)

Des notifications sur lesquelles agir

Quand une session a besoin de vous et que la fenêtre n'a pas le focus, l'icône du Dock rebondit sur macOS, la barre des tâches Windows clignote jusqu'à votre retour, et le badge du nombre de notifications non lues reste synchronisé sur macOS, Windows et Linux.

Dans le panneau, les lignes entières sont cliquables, et pas seulement le texte du titre ; les onglets manuels Unread/All et le marquage comme lu ont disparu. Les notifications suivent désormais deux choses indépendantes : si vous l'avez vue (effacé à l'ouverture du panneau) et si le problème sous-jacent est toujours ouvert (écrit uniquement par le cycle de vie). Une notification déjà lue reste listée tant que ce qu'elle signale n'est pas résolu, et se ferme d'elle-même quand la session quitte l'état needs-input, se termine, ou quand la PR est fusionnée ou fermée. Les transitions survenues pendant que le daemon était arrêté sont revérifiées au démarrage. (#2534, #3296, #3495, #3558)

Actions dans la palette de commandes et icône dans la barre des menus

Cmd/Ctrl+K propose désormais des actions de session, et pas seulement de la navigation, et la zone de composition de tâche derrière Nouvelle tâche a été extraite pour que la palette puisse lancer du travail avec la même interface. Sur macOS, une icône d'attention dans la barre des menus signale aussi les sessions qui vous attendent. (#3531)

Les conteneurs lancés par une session sont nettoyés

Les conteneurs Docker lancés par une session sont supprimés quand celle-ci atteint un état terminal, y compris quand elle plante ou reçoit un SIGKILL, et pas seulement quand vous l'arrêtez explicitement. Étiquetez un conteneur ao.session=$AO_SESSION_ID pour qu'il soit nettoyé, ou ao.spare=true pour une infrastructure partagée qui doit survivre à la session. Les appels Docker sont limités par un délai, et un projet qui ne se charge pas échoue de façon sûre au lieu de déclencher le nettoyage. (#3153)

Fichiers et diffs

Le panneau Fichiers remplace son bouton de recherche à bascule et son libellé de nombre de fichiers par un champ de recherche toujours visible, abandonne le bouton de rafraîchissement (la liste est déjà interrogée régulièrement) et reconstruit la liste en accordéon avec un compteur de fichiers en direct sur l'onglet. La visionneuse de diff diffuse les modifications du workspace au fil de l'eau, propose une bascule de disposition plus claire et des retours en ligne par fichier, et s'agrandit correctement en vue maximisée. Les diffs de workspace tiennent aussi compte de la base : une session enfant se compare à la branche dont elle est réellement issue plutôt qu'à une base fixe. (#3466, #3503, #3492, #3369, #3214)

Fiabilité

Une seule panne ne vide plus votre tableau. C'était le gros morceau (#3475). Trois bugs distincts pouvaient archiver toutes les sessions d'un coup. Le démontage des aperçus tuait le groupe d'un simple PID sans revérifier qu'il appartenait toujours au processus lancé, et un numéro de PID recyclé emportait une famille de processus sans rapport ; comme un serveur tmux est son propre chef de groupe, un seul kill de groupe obsolète détruisait toutes les sessions. Une sonde tmux « no server running » était interprétée comme la mort de chaque session, alors qu'elle ne dit rien d'aucune session en particulier : un hoquet du serveur archivait donc le tableau. Enfin, une migration grillée renvoyait des erreurs 500 que le tableau traitait comme des sessions absentes. Les sondes de vivacité signalent désormais un résultat non concluant au lieu d'un décès, le nettoyeur refuse de conclure une passe où la majeure partie du tableau semble morte en même temps, et le registre des migrations se répare de lui-même sur les historiques déjà grillés. (#3491, #3598)

Orchestrateurs. Il n'est plus possible de créer plusieurs orchestrateurs actifs pour un même projet, ao session ls fait apparaître les sessions d'orchestrateur masquées et compte les sessions masquées terminées au lieu de les écarter en silence, et les messages automatiques de relance de l'orchestrateur ont été retirés, car ils se sont révélés plus bruyants qu'utiles. (#3397, #3393, #3394)

Agents. Droid transmet la configuration de modèle propre à chaque rôle via son fichier de paramètres, écrit dans le répertoire de données plutôt que dans un répertoire temporaire. Les prompts de Grok sont transmis une fois sa TUI démarrée, et non dans un terminal qui n'écoute pas encore, et son terminal défile à la molette. Le faux harnais de test interne n'apparaît plus dans les sélecteurs d'agents. (#3156, #3534, #3533, #3518)

Navigateur. La sélection d'annotation est verrouillée pendant l'envoi d'un prompt pour qu'un clic ne puisse pas la recibler en cours d'envoi, les vues natives ne se dessinent plus par-dessus l'app quand elles sont masquées, la modification d'URL fonctionne dans le navigateur maximisé sur macOS, le badge du sélecteur d'éléments a quitté la boîte de dialogue d'annotation, et quitter une session puis y revenir ne réimpose plus une URL d'aperçu que vous aviez déjà quittée. (#3232, #3295, #3488, #3464, #3538, #3370)

Desktop. Le système de mise à jour automatique journalise les erreurs 404 sur les manifestes de version manquants au lieu d'afficher une boîte de dialogue vous demandant de vérifier un token d'authentification que vous n'avez pas. Le redimensionnement de la barre latérale et de l'inspecteur s'arrête à leur largeur minimale au lieu de les refermer d'un coup. Le daemon ignore SIGPIPE quand la sortie est fermée. Les sections PR et Completion de l'inspecteur restent masquées quand elles sont vides, et les résumés de PR en double sont dédoublonnés. En parallèle, une série de corrections de l'habillage : navigation de la barre de titre alignée sur les boutons de fenêtre macOS, finitions de la barre d'onglets du terminal, filets des paramètres et des archives, marges de la barre supérieure du terminal, et sélection de texte désactivée sur l'habillage de l'app et les pages marketing. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)

Sous le capot

La télémétrie dispose d'un interrupteur d'arrêt à l'exécution : AO_TELEMETRY_DISABLED_EVENTS réduit au silence des flux nommés (avec correspondance par préfixe via *) sans publier de nouvelle version, et les flux réduits au silence restent enregistrés dans le SQLite local pour pouvoir être débogués. Les événements du daemon portent un numéro de version, les événements de mise à jour sont enregistrés, les contrôles PostHog ont été durcis et la désactivation de l'autocapture est vérifiée dans les tests. La CI produit désormais un .rpm Linux à côté du .deb.

Côté site : la documentation est publiée avec des jumeaux Markdown dont toute la hiérarchie est exposée dans llms.txt, des pages de comparaison d'agents ont été ajoutées, le tableau de la page d'accueil, la démo de délégation et la maquette mobile ont été refaits pour correspondre à l'apparence réelle de l'app desktop, et le CTA de la bêta iOS est en ligne. Les données structurées Organization en double ont été supprimées et les content signals s'appliquent désormais aux robots autorisés. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)

Mise à niveau

GitHub Releases et Homebrew sont les modes d'installation pris en charge. Les installations existantes se mettent à jour sur place. Si une mise à jour précédente a laissé votre registre de migrations dans un état cassé, la 0.12.0 le répare au démarrage au lieu de faire échouer le lancement.

Liste complète des changements : https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0