Changelog

Toutes les modifications notables apportées à VelaTerm, du plus récent au plus ancien.

v0.1.91 est la première version publique ; les versions antérieures étaient des itérations internes et ne sont pas prises en compte.

v0.1.108

Dernières mises à jour
  • Vue de conversation expérimentale pour Claude, Codex et OpenCode : réponses en continu, raisonnement, détails des outils, autorisations et formulaires de questions. Les nouvelles configurations utilisent toujours le terminal par défaut.

  • Les commandes de conversation proposent les réglages du modèle, la file de messages, les interventions, la complétion de fichiers et les images jointes, selon les capacités du moteur.

  • Recherche dans les conversations, liens de fichiers, actions sur les images et polices distinctes facilitent la lecture. L’historique distant se charge progressivement et les détails des outils à la demande.

  • Les accusés de soumission permettent de rapprocher les résultats après une déconnexion. Les envois incertains restent en attente de confirmation, sans renvoi automatique.

  • Les nouvelles commandes vrefer et vsearch lisent et recherchent dans les autres sessions ; vrefer --ask délègue la lecture à un agent. vorch et vstat ajoutent la coordination multi-agent et la consultation des états.

  • Les entrées mémoire acceptent les étiquettes, l’édition directe, la protection des modifications non enregistrées et les réglages d’organisation. Le filtrage et la sélection à l’import de l’historique ainsi que la navigation du graphe sont améliorés.

  • Le client de partage public prend en charge l’association compte/appareil, l’accès limité à des sessions AI et les connexions relais chiffrées. L’envoi d’images par les invités et les formulaires MCP complexes restent indisponibles.

  • Les ID de reprise Codex sont vérifiés dans l’historique enregistré. Un historique confirmé manquant produit une erreur explicite au lieu d’ouvrir une session vide ; les terminaux déjà actifs restent accessibles.

  • Le retour arrière dépend du moteur : Codex restaure uniquement la conversation, sans restaurer les fichiers. La gestion de la portée et les contrôles préalables du répertoire dans OpenCode restent des limites connues.

  • Le changement de version conserve les versions verrouillées des dépendances. La validation des installations et mises à niveau multiplateformes et de l’intégration AI réelle reste à effectuer ; les contrôles automatisés ne la remplacent pas.

v0.1.107

Dernières mises à jour
  • 🧠 Mémoire globale (expérimental) : Claude ou Codex transforme vos conversations en un wiki partagé organisé par thème
  • 🕸️ Graphe de code (expérimental) : indexez un répertoire de travail, parcourez les relations entre symboles et reliez-les à vos mémoires
  • 🔎 Les agents peuvent interroger le code et la mémoire en cours de session avec vknowledge
  • 🖥️ SSH peut refléter l'application de bureau distante : mêmes onglets, mêmes divisions et même session active des deux côtés
  • 🪟 Les machines distantes SSH peuvent désormais tourner sous Windows
  • 📥 Importez les sessions Codex, Claude et OpenCode déjà présentes dans un dossier de projet
  • 🤖 Nouvel agent : OMP
  • 🎚️ vspawn permet de choisir le modèle et l'effort de raisonnement d'une session enfant
  • 🌿 vspawn-tree fonctionne dans les collections, et les sessions worktree en cours affichent une icône de branche
  • 🔤 La recherche privilégie les mots entiers et surligne exactement ce qu'elle a trouvé
  • 🖱️ Un clic du bouton central ferme un onglet
  • ⌨️ Navigateurs macOS : ⌘D et ⌘⇧D divisent les panneaux
  • 💬 La saisie avec une méthode d'entrée ne décale plus l'affichage, et le curseur reste visible pendant la composition
  • 🪓 Une division lancée depuis le menu n'affecte que la fenêtre active, et chaque division est consignée dans logs/split.log
  • 📁 Le sélecteur de dossier distant conserve le chemin que vous saisissez
  • ℹ️ Panneau Informations : heure de démarrage et durée d'exécution sur une même ligne, avec la charge moyenne sur macOS
  • 🔑 Les champs de mot de passe n'affichent plus le bouton d'affichage propre au navigateur

v0.1.106

Dernières mises à jour

Espace de travail

  • La barre latérale s'enrichit de collections : des conteneurs de premier niveau qui ne sont rattachés à aucun dossier sur le disque. Certaines sessions n'ont pas vocation à faire partie d'un dépôt — comme les sessions distantes, les pages de navigateur ou un terminal ouvert pour un simple test. Jusqu'à présent, il fallait obligatoirement les placer au sein d'un projet, où elles n'avaient pas vraiment leur place. Une collection est une entrée autonome dotée d'un nom, sans dossier sous-jacent sur le disque. Comme il n'y a pas de racine de projet, les actions non pertinentes sont masquées d'emblée plutôt que d'échouer après coup : « New Worktree Session », « Move to Worktree… » et le sélecteur de worktree dans la boîte de dialogue de nouvelle session sont tous masqués pour les collections au lieu de renvoyer une erreur lorsqu'on clique dessus. À la place, la boîte de dialogue de nouvelle session intègre un champ Répertoire de travail qui pointe par défaut vers votre dossier utilisateur (home), avec un sélecteur de dossier natif sur desktop. Les sessions lancées sans répertoire spécifié s'ouvrent désormais dans votre dossier utilisateur au lieu d'hériter du chemin de lancement de l'application (qui était / sur macOS).

  • Le panneau Ressources affiche désormais l'ensemble de la machine, et non plus seulement la session active. Auparavant, le panneau n'indiquait la consommation du processeur et de la mémoire que pour l'arbre de processus propre à la session, ce qui empêchait de savoir si la session consommait toutes vos ressources ou si la machine était déjà saturée. Le panneau est désormais divisé en deux sections : THIS SESSION et SYSTEM. La section SYSTEM affiche des barres de progression pour le processeur, la mémoire et le swap (qui passent à l'orange au-delà de 70 % et au rouge au-delà de 90 %), accompagnées d'une ligne propre à la plateforme : la pression mémoire sur macOS, la charge moyenne rapportée au nombre de cœurs sur Linux, et aucune sur Windows (qui ne dispose pas de métrique équivalente). Si seule votre session vous intéresse, décochez « system » dans l'en-tête du panneau : les lignes système disparaissent et l'échantillonnage en arrière-plan s'arrête totalement. Ce réglage est conservé et s'applique au panneau de chaque session.

  • Windows et Linux disposent d'une barre de menus, accessible avec la touche Alt. macOS bénéficie de menus système natifs, mais sur Windows et Linux, les paramètres, la recherche de mises à jour et le découpage des volets n'étaient accessibles que depuis l'icône de la barre de titre. Un appui sur la touche Alt seule permet désormais d'afficher ou de masquer la barre de menus. Les combinaisons de touches avec Alt restent inchangées : comme Alt sert de préfixe Meta dans les terminaux, les raccourcis comme Alt+B et Alt+F continuent d'être transmis au shell ; seul un appui isolé sur Alt, qui n'envoie rien au terminal, ouvre le menu. La barre comprend File (paramètres, recherche de mises à jour), Terminal (nouveau terminal, scinder à droite, scinder en bas) et Help (site web, retours, partage), et affiche les raccourcis correspondant à votre configuration de touches personnalisée. Elle se contrôle aussi bien à la souris qu'au clavier : appuyer sur Échap ferme le menu ouvert, masque la barre et redonne le focus au terminal.

  • L'option « Clear notification badges » du menu efface les badges que rien d'autre ne pouvait supprimer. Le badge du dock comptabilise les sessions non lues ainsi que les cartes de confirmation de création de processus restées sans réponse. Or, le bouton de nettoyage de la barre latérale n'apparaissait qu'en présence de sessions non lues et ne traitait que ces dernières. Si une carte de confirmation sans réponse persistait — par exemple après la fermeture d'une fenêtre ou la suppression d'une session où la carte ne pouvait plus s'afficher —, le badge du dock restait bloqué sur 1 sans aucun moyen de le faire disparaître. Cette nouvelle option de menu marque toutes les sessions comme lues, traite toutes les demandes de création en attente comme refusées et remet directement à zéro le compteur de badge du système d'exploitation. C'est particulièrement appréciable sur macOS, qui conserve le compteur de badge du dock même après le redémarrage de l'application.

  • La fenêtre ne se fige plus pendant que les commandes lisent des fichiers ou attendent le système. Les commandes synchrones de Tauri s'exécutent sur le thread principal, bloquant l'interface utilisateur pendant toute leur durée. Un audit des 43 commandes a révélé que 13 d'entre elles effectuaient des opérations d'E/S sur le thread principal : la demande d'autorisation pour les notifications sur macOS pouvait geler l'interface jusqu'à une minute en attendant l'accord de l'utilisateur ; la lecture des enregistrements de longues sessions parcourait des dizaines de mégaoctets par blocs de 64 Ko ; le collage de captures d'écran écrivait directement sur le disque ; et la récupération du dossier de travail d'une session lançait lsof. Ces 13 commandes s'exécutent désormais en dehors du thread principal. Le traitement des frappes au clavier reste quant à lui sur le chemin rapide, sans changement.

Accès à distance

  • Les hôtes affichent désormais les clients distants connectés. Le partage de session étant bidirectionnel, un client distant peut réorganiser la disposition de l'hôte — or, l'hôte n'avait jusqu'ici aucun moyen de savoir si quelqu'un était connecté, et encore moins qui. La barre de titre affiche désormais un badge « Mirrored by N » ; cliquer dessus dévoile la liste des clients connectés avec leur nom, leur adresse IP et l'heure de leur connexion. Le nom du client est transmis lors de la négociation chiffrée (avec « Unnamed » par défaut si aucun nom n'est fourni).

Agents IA

  • L'utilisation du compte est désormais récupérée une seule fois par machine au lieu d'une fois par session. Les quotas d'utilisation sont associés au compte, mais le panneau Info de chaque session les récupérait jusqu'ici séparément. Ouvrir dix sessions entraînait dix requêtes en double pour les mêmes données — ce qui déclenchait souvent les limites de débit strictes de Claude et vidait le panneau. Un service centralisé d'interrogation en arrière-plan conserve désormais un instantané unique dans lequel toutes les sessions viennent lire, et diffuse les mises à jour dès que les données changent. Il interroge uniquement les fournisseurs que vous utilisez activement — détectés par la présence de ~/.claude, ~/.codex ou ~/.grok/auth.json — sans toucher au trousseau d'accès du système pour éviter les demandes d'autorisation superflues. Les instantanés sont enregistrés sur le disque afin que le panneau affiche immédiatement les chiffres en cache dès le redémarrage, sans attendre la première interrogation. La sortie de veille d'un ordinateur portable actualise également les données sans délai au lieu d'attendre le prochain intervalle planifié. En cas d'échecs consécutifs, le délai d'interrogation augmente progressivement jusqu'à 8x. Dans les Paramètres, l'intervalle de rafraîchissement s'accompagne désormais d'un interrupteur marche/arrêt explicite à côté du champ de saisie, remplaçant la valeur ambiguë de 0 seconde.

  • Les échecs d'actualisation de l'utilisation sont clairement signalés comme obsolètes au lieu de paraître à jour. Auparavant, lorsqu'une demande d'actualisation échouait, le client renvoyait silencieusement sa copie en cache tout en enregistrant un rafraîchissement réussi — ce qui avançait l'horodatage, masquait les erreurs et réinitialisait le délai exponentiel. En cas de dépassement des limites de débit, le panneau semblait ainsi opérationnel alors même qu'il continuait ses interrogations toutes les cinq minutes. Les requêtes ayant échoué conservent désormais les valeurs en cache mais affichent un badge orange stale à côté du fournisseur. Survoler ce badge affiche une info-bulle précisant l'heure de l'échec, le motif de l'erreur et l'ancienneté de la valeur affichée. L'horodatage « Updated » reflète la dernière synchronisation réussie, et les délais retry-after renvoyés par les serveurs limitant le débit sont respectés, les actualisations manuelles s'exécutant toujours immédiatement.

  • Les quotas hebdomadaires par modèle apparaissent dans le panneau d'utilisation. En plus des limites globales du compte sur 5 heures et 7 jours, le point de terminaison de consommation fournit des quotas hebdomadaires spécifiques à chaque modèle. Ceux-ci étaient jusqu'alors ignorés : les utilisateurs travaillant avec des modèles comme Fable ne pouvaient voir que l'utilisation globale du compte plutôt que leur quota restant pour ce modèle. Ces lignes détaillées sont désormais affichées sous les totaux, regroupées par famille de modèles.

  • La réouverture d'une session OpenCode restaure son historique de discussion. L'application vérifiait auparavant si une session existait encore à l'aide de opencode session list, qui ne recherche que les sessions situées dans le répertoire de travail actuel. Comme l'application de bureau s'exécute depuis son répertoire de lancement (/ sur macOS), les identifiants de session existants n'étaient jamais trouvés, et les tentatives de reprise ouvraient silencieusement des sessions vides. La vérification interroge désormais directement l'identifiant spécifique de la session et ne la considère comme supprimée que si la commande le confirme explicitement. Les autres erreurs sont traitées comme indéterminées et l'application poursuit la reprise, évitant ainsi toute perte accidentelle de l'historique de session.

Interface

  • La saisie avec un éditeur de méthode d'entrée (IME) affiche désormais le texte en cours de composition. Le texte saisi avec un IME (comme Pinyin ou Kana) était jusqu'alors invisible sur les trois plateformes tant qu'il n'avait pas été validé avec Entrée. Cela venait d'une règle CSS personnalisée : xterm affiche le texte de composition dans un conteneur superposé non contraint, où notre contrainte right ajoutée (destinée à renvoyer les longues lignes du terminal à la ligne) aboutissait à une largeur nulle, tandis que overflow: hidden masquait complètement le texte. Cette règle a été supprimée, et le seul élément encore redéfini est le jeu de couleurs noir sur blanc par défaut de la superposition, qui ne correspond à aucun thème. Un problème connexe a été corrigé au même moment : xterm agrandissait son champ texte masqué pour l'adapter à la taille de la superposition afin de positionner les suggestions de l'IME, mais ne le réduisait jamais par la suite, laissant une zone invisible qui bloquait les clics de souris et la sélection de texte sur cette ligne.

  • Sur macOS, les raccourcis Ctrl ne déclenchent plus les combinaisons de touches associées à Commande. La vérification des touches modificatrices traitait auparavant Cmd et Ctrl comme interchangeables sur macOS. En conséquence, les raccourcis standard du terminal entraient en conflit avec ceux de l'application : Ctrl+D (EOF) scindait les volets, Ctrl+W (supprimer un mot) fermait les volets, et des raccourcis comme Ctrl+F, Ctrl+T et Ctrl+O étaient interceptés par l'application. Comme les nouveaux volets s'ouvrent silencieusement, ils semblaient souvent surgir de nulle part. L'application de bureau pour macOS utilise désormais exclusivement Cmd pour les raccourcis, tandis que les autres plateformes (ainsi que les navigateurs web connectés à un Mac) utilisent exclusivement Ctrl.

  • Les menus déroulants ne se rouvrent plus immédiatement après la sélection d'une option. Un élément englobant <label> propageait les clics sur l'ensemble de la ligne jusqu'au bouton de déclenchement, provoquant la réouverture du menu déroulant dès qu'un élément était sélectionné.

Corrections

  • Linux : l'AppImage démarre à nouveau. L'AppImage 0.1.105 plantait sur Ubuntu 22.04 avant même l'apparition d'une fenêtre, incapable de lancer les processus auxiliaires de WebKit. Les outils d'empaquetage AppImage réécrivent les chemins littéraux /usr dans les binaires en ././ (en préservant la longueur de la chaîne pour les correctifs sur place), ce qui nécessite que le script de lancement change le répertoire de travail vers $APPDIR/usr pour que ces chemins soient résolus. Dans la version 0.1.105, notre script de lancement personnalisé — introduit pour empêcher la fuite de variables d'environnement vers les shells enfants — transmettait bien les variables d'environnement mais avait omis ce changement de répertoire. Le lanceur change désormais correctement de répertoire, avec une assertion à la compilation pour éviter toute régression. Les versions 0.1.104 et antérieures n'étaient pas concernées.

  • Windows : les notifications émettent à nouveau un son, et cliquer dessus redirige vers leur session. Les notifications Windows envoyaient auparavant un identifiant de son macOS au plugin de notifications. Le nom ne pouvant être interprété, il était converti en silence — ce qui signifie que les notifications Windows n'émettaient aucun son, quels que soient les paramètres. Les notifications Windows avaient été redirigées via ce plugin il y a deux versions pour contourner un problème qui avait été résolu dans cette même version. Ce détour est désormais supprimé : les notifications repassent par le canal natif, ce qui rétablit à la fois le son et la navigation vers la session d'un simple clic.

  • Windows : les caractères de tracé de cadres et de blocs s'alignent correctement. Les cadres de terminal étaient auparavant rendus avec une police de substitution proportionnelle, provoquant des défauts d'alignement visuel. Même après avoir corrigé cela, les caractères de bloc (utilisés dans les barres de progression et la mascotte de Claude Code) présentaient encore un très fin interstice vertical le long du bord droit de chaque cellule, car la police de substitution était légèrement plus étroite que la police principale du terminal. Ces deux plages de caractères sont désormais fournies par un sous-ensemble intégré de JetBrains Mono, garantissant une largeur de glyphe parfaitement identique.

  • Windows : git fonctionne dans la variante complète de Git Bash. Même lorsque l'installation complète de Git Bash réussissait, exécuter git dans le terminal renvoyait « command not found », incitant à plusieurs reprises les utilisateurs à installer la version complète de Git Bash. Git Bash n'ajoute mingw64/bin au PATH que lorsqu'on lui indique dans quelle arborescence de répertoires il s'exécute. Notre lanceur de shell omettant ce paramètre, les binaires situés exclusivement dans ce répertoire — comme git et curl — étaient introuvables. De plus, l'invite de téléchargement sélectionne désormais le programme d'installation correspondant à l'architecture du système hôte plutôt que d'opter par défaut pour le 64 bits.

  • Windows : la suppression d'un worktree fonctionne, et la réinstallation des hooks Kiro ne les duplique plus. Les commandes de suppression de worktree étaient auparavant exécutées depuis le répertoire du worktree cible. Comme Windows empêche la suppression du répertoire de travail actuel d'un processus actif, l'opération échouait systématiquement avec une erreur d'autorisation ; les commandes Git s'exécutent désormais depuis la racine principale du dépôt. De plus, la logique de détection des hooks comparait des chemins contenant des barres obliques (slashs) à des chemins Windows contenant des barres obliques inverses (antislashs), ce qui faisait échouer la vérification et ajoutait des entrées de hook en double à chaque réinstallation.

v0.1.105

Dernières mises à jour

Espace de travail

  • L'état d'une session, les marques de non-lu et le fait qu'une session tourne encore sont désormais tranchés par le backend, et tous les clients voient la même réponse. Chaque client déduisait ces informations de ce qu'il avait pu observer lui-même, si bien que « non lu » signifiait en réalité « non lu dans cette fenêtre » : lire une session dans le navigateur laissait la copie du bureau en non-lu, et le filtre d'état dynamique remettait sans cesse cette ligne dans la liste partagée, où même « Actualiser l'état » n'arrivait pas à la retirer. Les événements d'état n'étaient en outre enregistrés qu'une fois que le client avait lui-même lancé une session : un navigateur tout juste connecté affichait donc des pastilles pour les sessions qu'il avait ouvertes, et rien pour les autres. Le backend tient maintenant un enregistrement faisant autorité par session — l'agent, son état, si son processus est vivant, et l'indicateur de non-lu —, répond à une requête groupée lorsqu'un client se connecte ou se reconnecte, et diffuse chaque changement à tout le monde. Les clients rapportent ce qu'ils observent ; c'est le backend qui en tire les conclusions. Lire une session sur un téléphone efface la marque sur le bureau, un navigateur tout juste connecté affiche les bonnes pastilles pour des sessions qu'il n'a jamais ouvertes, et les règles d'arbitrage qui vivaient dans le frontend ont déménagé avec leurs raisons et leurs tests : un hook qui a signalé une fois verrouille tout ce qui serait déduit de la sortie brute, une sortie continue n'implique l'état actif que pour une session qui a un agent, qui n'est pas Codex et pour laquelle aucun rapport faisant autorité n'existe encore, et une retenue de 1200 ms empêche une tâche tout juste démarrée d'être annulée par un événement de fin arrivant juste derrière elle. La lecture de l'écran fait exception, parce qu'elle a besoin de la grille rendue et que celle-ci n'existe que dans un client : le client qui détient la taille du terminal rapporte ce qu'il a lu, et c'est le backend qui décide de l'accepter ou non — un rapport venu de n'importe quel autre client est refusé. Si quelque chose tourne mal là-dedans, régler vlx-arbitration sur frontend dans localStorage rend l'arbitrage à l'ancienne chaîne du frontend.

  • Redémarrer une session ne ferme plus son onglet sur l'autre client. pty://killed ne transportait aucune donnée : l'autre côté ne pouvait donc pas distinguer un redémarrage d'une fermeture. Il traitait tout comme une fermeture, retirait le volet, puis renvoyait cette disposition en miroir. L'événement indique désormais quel client a tué le processus et pourquoi, si bien qu'un redémarrage conserve le volet et attend l'arrivée du nouveau processus. Une raison absente ou non reconnue compte toujours comme une fermeture — laisser un volet ouvert pour une session qui ne reviendra jamais met un terminal mort à l'écran, ce qui est pire que de fermer un volet qui allait redémarrer.

  • Un navigateur qui se connecte à un bureau venant de restaurer son espace de travail ne démarre plus réellement toutes les sessions. Restaurer un espace de travail affiche des cartes de remplacement au lieu de lancer les processus, mais cette décision n'existait que sur le bureau ; le navigateur suivait la disposition mise en miroir, ne pouvait pas distinguer « pas en cours d'exécution » de « en cours d'exécution, simplement jamais ouverte ici », et montait les terminaux — or monter un terminal, c'est le lancer. Une feuille qui arrive avec la disposition de quelqu'un d'autre affiche maintenant une carte de remplacement quand le backend indique qu'aucun processus ne se trouve derrière elle. Ouvrir une session vous-même reste une intention de la démarrer, et un terminal que vous êtes en train de regarder n'est jamais remplacé par une carte à la sortie de son processus, parce que vous voulez peut-être encore lire ce qu'il a affiché.

  • Une modification de réglage atteint immédiatement les autres clients. Le backend a toujours détenu les réglages faisant autorité, mais il les modifiait sans en avertir personne : l'autre client ne l'apprenait qu'à son lancement suivant. Sur une connexion distante, c'est plus qu'un affichage discordant : désactiver « étendre dynamiquement le filtre d'état » sur un client ne servait à rien tant qu'un autre continuait d'ajouter des lignes à la liste partagée, et le client ayant la plus petite limite d'onglets actifs évinçait les onglets d'arrière-plan sous le nez de tous les autres. Écrire un réglage diffuse désormais la clé qui a changé, et chaque client la relit par le même chemin qu'au démarrage : les règles qui masquent les valeurs protégées aux appelants distants continuent donc de s'appliquer — la diffusion ne transporte que des noms de clés, jamais des valeurs. Les téléphones, qui auparavant n'envoyaient ni ne recevaient de réglages, y participent eux aussi.

  • Un navigateur attend la disposition mise en miroir avant de restaurer la sienne. Une fenêtre distante a deux sources de disposition — celle de son propre localStorage et celle que l'hôte lui pousse en mode miroir — et la première arrivée était écrasée par l'autre. Afficher la locale d'abord coûtait plus qu'un scintillement : monter une feuille de terminal lance un vrai processus, et pour une session dont le processus était déjà parti, cela revenait à démarrer un shell que personne ne regarderait jamais, lequel restait ensuite en place, puisqu'un navigateur détache ses terminaux au lieu de les arrêter. Le navigateur attend maintenant que le premier alignement se stabilise avant de restaurer quoi que ce soit, pendant deux secondes au plus ; si le backend est lent ou injoignable, il se rabat sur la disposition locale plutôt que de rester sur une fenêtre vide. Les téléphones, et tout client dont le mode miroir est désactivé, passent immédiatement.

Accès à distance

  • Une connexion SSH peut activer le mode miroir pour le service qu'elle démarre. L'interrupteur se trouve dans le panneau d'accès à distance, mais SSH démarre un service sans interface sur la machine distante, et là-bas il n'y a aucun panneau où cliquer. Maintenez Option en cliquant sur « Connexion distante » et le formulaire SSH propose désormais une case « Mettre l'interface en miroir sur tous les clients », décochée par défaut. La valeur voyage avec la connexion et reste en mémoire du service au lieu d'être écrite dans la base de données de la machine distante : quand vous réutilisez en plus la base du bureau distant, une connexion SSH ne doit pas retourner discrètement un interrupteur sur le panneau de quelqu'un d'autre. Le choix est mémorisé par hôte : reprendre la même machine dans l'historique le rétablit. Réutiliser un service déjà en cours d'exécution exige maintenant que la version, le mode de données et le mode miroir concordent tous les trois — si l'un des trois diffère, l'ancien service est remplacé, ce qui met fin aux sessions qui y tournaient ; cette option est donc placée derrière Option, à côté de celle qui choisit la base de données.

  • Un client mis en miroir l'annonce. Les onglets et les divisions d'un client suiveur se réorganisaient sans que rien à l'écran n'explique d'où venait le changement. La barre de titre porte désormais un badge « Mirrored », avec une explication au survol. L'hôte n'en affiche pas : c'est lui qui tient l'interrupteur.

  • Les fichiers circulent désormais entre votre machine et celle qui exécute le terminal. L'accès à distance affichait les fichiers de la machine distante sans permettre d'en rapatrier un ni d'en déposer un : seule une commande dans le terminal le permettait. Le panneau Fichiers propose maintenant Télécharger dans le menu contextuel d'un fichier et Envoyer dans son en-tête, et glisser des fichiers depuis votre bureau sur la ligne d'un dossier les y envoie. Les deux sens empruntent la même connexion authentifiée que le reste, ce qui fonctionne aussi bien depuis un navigateur du réseau local que depuis un téléphone ou une fenêtre de connexion distante. Les transferts avancent par blocs, avec une file de progression sous l'arborescence, et se poursuivent pendant que vous consultez un autre panneau. Télécharger est un lien de téléchargement ordinaire, pris en charge par le gestionnaire de téléchargement du navigateur : il écrit sur le disque au fil de l'eau, affiche le débit et le temps restant, et se met en pause puis reprend — quelle que soit la taille du fichier et dans tous les navigateurs, téléphone compris. Le lien porte un jeton émis pour ce seul fichier et valable quelques minutes, car ce serveur conserve les identifiants dans un en-tête et un navigateur qui suit un lien n'en envoie aucun. Un envoi s'écrit sous un nom temporaire et n'est renommé qu'une fois terminé : un transfert interrompu ne laisse donc jamais un fichier à moitié écrit là où il devrait y en avoir un complet ; un nom déjà pris est refusé avant tout transfert. Les envois affichent leur débit et le temps restant, et survivent à une coupure : un bloc en échec patiente puis réessaie pendant environ une minute, en demandant au serveur jusqu'où son fichier temporaire est réellement allé plutôt que de renvoyer un bloc peut-être déjà arrivé. Même en abandonnant, ces octets sont conservés : reglissez le même fichier sur le même dossier et l'envoi reprend là où il s'était arrêté, y compris après un rechargement — seule l'annulation jette le fichier partiel.

Agents IA

  • Les sessions Antigravity et Copilot sont nommées d'après leur premier message. Toutes deux manquaient au renommage automatique, ce qui laissait des rangées d'« Antigravity 1, 2, 3 » dans la barre latérale. Les événements de hook d'Antigravity ne transportent aucun texte de l'utilisateur, seulement un identifiant de conversation et un chemin de transcription : le premier message est donc lu dans la transcription, et le bloc de métadonnées qui le suit est laissé hors du titre. Les événements de Copilot ne portent pas non plus de nom d'événement et se distinguent à leur forme : un corps contenant une invite et aucun nom d'outil est désormais considéré comme une soumission — ce qui laisse correctement de côté l'invite avec laquelle une session est démarrée, ainsi que les appels d'outils.

  • Une session Antigravity se rouvre avec son historique. La reprise a besoin de l'identifiant de conversation, et l'analyseur qui extrait un identifiant de session des arguments de lancement ne reconnaissait pas la façon dont Antigravity l'écrit : --conversation=<id> n'avait donc jamais d'ancrage où pointer, et chaque session rouverte revenait vide.

  • vspawn --yes lance une sous-tâche sans passer par la carte de confirmation. Quiconque garde « confirmer avant de lancer une sous-tâche » activé devait cliquer sur une carte pour chaque session enfant d'une exécution. L'option — qui s'écrit aussi -y ou --no-confirm — saute la carte pour cet appel-là et démarre la session avec les réglages par défaut. Elle ne modifie pas le réglage lui-même : le lancement suivant, sans elle, repose la question.

  • Le champ de modèle de la carte de sous-tâche accepte tout ce que vous tapez. C'était un simple menu déroulant : seuls les modèles de la liste pouvaient être choisis — alors qu'un agent comprend bien plus d'identifiants que cela, des noms datés comme claude-opus-4-6, des noms préfixés par le fournisseur, des alias configurés localement. C'est maintenant un champ de texte, avec les modèles connus suspendus à un menu déroulant voisin en guise de raccourcis. La liste est une suggestion, pas une liste blanche : ce que vous tapez est ce qui sera transmis, un champ vide signifie pas de --model du tout, et la liste se filtre à mesure que vous tapez puis se replie quand un identifiant personnalisé ne correspond à rien.

Interface

  • Un seul menu déroulant, utilisé partout. Les menus déroulants de l'application avaient été copiés depuis le même code plus d'une dizaine de fois, puis avaient divergé : trois fonds de panneau, quatre ombres, trois couleurs de survol, des hauteurs de déclencheur de 26, 28 et 32 pixels, et des coches sur les lignes sélectionnées dont seule une liste à choix multiple a besoin. Un composant unique alimente désormais les sélecteurs de branche de la fusion, les sélecteurs de langue, de shell par défaut et de police dans les réglages, le sélecteur d'agent, les boîtes de dialogue de worktree, le type d'agent des sessions nouvelles et restaurées, ainsi que le dernier select natif de la fenêtre de formulaire. Il apporte aussi le contrôle au clavier, dont aucun ne disposait : les flèches pour se déplacer, Entrée pour choisir, Échap pour fermer sans fermer la boîte de dialogue qui se trouve derrière, Début et Fin pour aller aux extrémités. Les deux menus de la barre d'état se comportent comme avant, et le filtre d'état de la barre latérale garde ses coches, parce qu'il est réellement à choix multiple.

  • Le champ de mot de passe du panneau d'accès à distance peut être révélé. C'était un champ de mot de passe nu : impossible de voir ce que vous aviez tapé. Le bouton en forme d'œil existait, mais seulement à l'intérieur du fichier du panneau de connexion. Les deux partagent maintenant un seul composant, et l'état révélé se réinitialise à la fermeture du panneau.

  • Le sélecteur d'IP ne ressemble plus à un contrôle du système. C'était un select natif, que WKWebView habille d'un style système qui s'accorde mal à un panneau sombre — le même reproche que celui fait aux menus déroulants remplacés plus haut. Il utilise désormais le composant partagé, et son libellé est raccourci en « IP », puisque le texte à côté dit déjà à quoi il sert.

Corrections

  • La recherche de mises à jour interroge le serveur à chaque fois. Un client laissé en marche restait figé sur la première version qu'il avait vue : ayant trouvé la 0.1.101, il continuait de proposer la 0.1.101 après la sortie de la 0.1.104, et « Rechercher des mises à jour » ne faisait que rouvrir la même boîte de dialogue, parce que l'ancien code sortait immédiatement dès qu'un avis était déjà en attente. Chaque vérification est maintenant une vraie requête. Une version plus récente remplace l'avis à l'écran, une version identique ou un téléchargement en cours le laisse tel quel, et un serveur qui ne signale aucune mise à jour retire un avis devenu périmé — la version a été retirée, ou vous l'avez installée vous-même entre-temps. Le bouton « Télécharger manuellement » ouvre désormais la page de téléchargement du site ; il remettait auparavant le paquet propre au programme de mise à jour, qui se décompresse sur place et ne peut pas être installé à la main.

  • Un calque d'erreur plein écran n'apparaît plus quand les terminaux sont détruits rapidement. La zone d'affichage de xterm planifie une synchronisation de la zone de défilement à sa construction, puis une autre à sa réinitialisation, et n'annule ni l'une ni l'autre à la libération : un terminal ouvert et fermé dans la même tâche — ce que fait précisément la reconstruction de l'arbre des sessions pendant une connexion distante — exécutait quand même ces rappels, tombait sur un moteur de rendu déjà vidé, et levait une erreur. Cette erreur vient d'un minuteur, où ni try/catch ni frontière d'erreur ne peuvent l'atteindre : elle est donc capturée globalement et filtrée étroitement — seule une pile ou un message nommant cette synchronisation, accompagné d'une mention du moteur de rendu ou de ses dimensions, est avalé comme inoffensif et écrit dans le journal des requêtes. Les vrais plantages font toujours apparaître le calque.

v0.1.104

Dernières mises à jour

Agents IA

  • La carte de sous-tâche propose désormais les vrais modèles de chaque agent, et l'option d'effort que cet agent comprend réellement. La carte construisait ses arguments de lancement avec --model et --effort pour tout le monde, alors que seuls Claude, Kiro et Antigravity écrivent ainsi l'effort de raisonnement — Grok et Zoo l'appellent --reasoning-effort, Cline l'appelle --thinking. Choisir un niveau d'effort pour l'un des autres passait à la CLI une option dont elle n'avait jamais entendu parler, et la session ne démarrait pas. Chaque agent fournit maintenant ses propres noms d'options et ses propres valeurs. Le sélecteur de modèle suit ce que chaque CLI est capable de nous dire : celles qui savent énumérer leur catalogue (OpenCode, Grok, Crush, Antigravity, Cursor, pi, Kiro) sont interrogées et proposent la vraie liste, celles qui ont un ensemble figé (Claude, Codex, Kimi Code) proposent cet ensemble, et les autres vous laissent un champ de texte avec un exemple de la forme attendue. Un agent qui n'est pas installé ou pas connecté le dit, au lieu de tourner indéfiniment. Choisir « Par défaut » efface désormais une valeur héritée au lieu de laisser l'ancienne en place, et choisir un niveau d'effort ne fait plus tomber le modèle hérité de la session parente.

  • Une sous-tâche lancée depuis une session Kimi Code reste en Kimi Code. Kimi Code manquait dans la liste dont le chemin de lancement se sert pour hériter de l'agent du parent : ses sessions enfants revenaient donc silencieusement avec l'agent par défaut.

Espace de travail

  • Un groupe peut être déplacé vers un worktree après sa création. Le worktree se choisissait à la création du groupe et restait figé ensuite ; changer d'avis obligeait à supprimer le groupe et à le reconstruire. Faites un clic droit sur un groupe et choisissez « Move to Worktree… » pour créer un nouveau worktree, en rattacher un existant, ou réorienter un groupe déjà rattaché. Seul le groupe lui-même change : les sessions déjà à l'intérieur gardent le répertoire avec lequel elles ont été créées — une session en cours d'exécution ne peut pas être déplacée vers un autre répertoire situé sous elle-même — tandis que les sessions créées ensuite démarrent dans le worktree.

  • Le mode miroir couvre maintenant tout l'arbre de la barre latérale. Il partageait la sélection et les panneaux repliés ; le champ de recherche et les filtres d'état et de marque restaient locaux, au motif que les synchroniser interrompt celui qui est en train de chercher quelque chose. Le raisonnement était à l'envers : mettre en miroir signifie que les deux fenêtres tiennent le même état, pas que l'une rejoue les frappes de l'autre — un filtre actif ici est actif là-bas. Ce qui interrompt vraiment les gens, ce sont deux côtés qui montrent des arbres différents. Chaque projection de la barre latérale voyage désormais : la disposition des divisions, le nom de chaque projection, son texte de recherche, ses filtres d'état et de marque, et son propre état de repli. Le format de l'instantané passe en version 2, et un client resté sur une version antérieure cesse de se mettre en miroir plutôt que d'appliquer la moitié d'une trame : rechargez donc toute fenêtre que vous avez laissée ouverte pendant la mise à jour.

Interface

  • Fermer la fenêtre sous macOS pose la même question que quitter. ⌘Q et l'entrée de menu passaient par la confirmation de l'application, mais le bouton rouge de fermeture détruisait la fenêtre sur-le-champ — or c'est cette fenêtre qui héberge la webview où vit la boîte de confirmation. Vous n'aviez donc aucune confirmation du tout, ou bien le repli natif réduit à l'essentiel, sans case « enregistrer l'espace de travail » et avec un texte non traduit. Les trois plateformes maintiennent désormais la fenêtre ouverte jusqu'à votre réponse.

  • « Enregistrer l'espace de travail » est coché par défaut, et reste comme vous l'avez laissé. Perdre une disposition coûte plus cher qu'un instantané dont on n'avait pas besoin : la case démarre donc cochée. Elle oubliait aussi votre choix : le réglage était écrit en base de données à travers un anti-rebond de 400 ms, et quitter tuait le processus pendant cette fenêtre, si bien que le lancement suivant se réconciliait avec l'ancienne valeur et remettait votre modification en place. L'écriture est maintenant vidée avant la sortie, avec un plafond de 600 ms pour qu'un backend bloqué ne laisse pas le bouton de confirmation tourner indéfiniment. (Contribution de FarhadGSRX.)

  • Les mots de passe du panneau de connexion distante peuvent être révélés. Le mot de passe de l'URL comme celui du SSH disposent d'un bouton en forme d'œil qui bascule entre masqué et texte en clair. L'état révélé est propre au champ et se réinitialise à la fermeture du panneau : un mot de passe ne reste donc jamais affiché à l'écran.

  • Le badge de filtre de la barre latérale compte tous les filtres actifs. Un filtre de marque se contentait d'allumer le bouton sans rien dire, si bien que le badge pouvait afficher 1 alors que deux filtres étaient actifs. Il additionne désormais les états et les marques et correspond aux coches du menu déroulant ; un filtre d'état seul garde sa pastille colorée.

Corrections

  • Les mises à jour automatiques fonctionnent de nouveau sous macOS. Les paquets de la v0.1.103 transportaient des entrées compagnes AppleDouble (._VelaTerm.app) ; le programme de mise à jour retire le premier composant de chaque chemin — ce qui ne laissait ici qu'un chemin vide — et refusait alors de décompresser l'archive. Les deux architectures étaient touchées : tous les utilisateurs macOS en v0.1.103 restaient donc bloqués. L'empaquetage n'écrit plus ces entrées.

  • Les contrôles natifs suivent le thème de l'application quand il diffère de celui du système. Appliquer un thème définissait bien les couleurs de l'application, mais ne mettait jamais à jour color-scheme, initialisé une seule fois au démarrage depuis la préférence du système et jamais retouché ensuite : les cases à cocher, les menus déroulants et les barres de défilement restaient sombres sous une application claire posée sur un système sombre. (Contribution de FarhadGSRX.)

  • Un clone tout neuf se compile de nouveau. La crate Rust embarque ../dist à la compilation, et la commande de développement ne le produit pas : un dépôt fraîchement cloné échouait donc à compiler avant même de pouvoir tourner. Le script de build crée maintenant le répertoire quand il manque. (Contribution de FarhadGSRX.)

v0.1.103

Dernières mises à jour

Corrections

  • Les sessions Codex sous Windows ne refusent plus de démarrer. Chaque session Codex échouait immédiatement avec unexpected argument '--codex-hook' parce que la table TOML des hooks de cycle de vie, passée en ligne de commande, contient des espaces et des guillemets doubles, et codex.cmd installé par npm repasse cela par cmd.exe, qui supprime les guillemets et découpe la valeur en plusieurs arguments. L'injection des hooks est désormais ignorée sous Windows ; la détection d'état revient aux heuristiques existantes notify / screen / busy, qui continuent de signaler les états actif et inactif, mais avec moins de précision que les hooks. macOS et Linux ne sont pas affectés et continuent d'utiliser les hooks.

  • La correction du pré-édit IME Windows de la v0.1.102 a été annulée. La correction qui restaurait l'overlay de composition pour la saisie en chinois, japonais et coréen lui ajoutait également une couleur de fond, une bordure de 1px et des coins arrondis, ce qui dessinait un petit cadre autour du texte de pré-édition dans le terminal — ce qui ne devrait pas y apparaître. Comme le dimensionnement de l'overlay, la géométrie du conteneur auxiliaire et le nettoyage du textarea étaient interdépendants, l'ensemble de la modification a dû être annulé. Le problème sous-jacent — saisie CJK à l'aveugle sous Windows — reste ouvert et est suivi dans l'issue #6.

v0.1.102

Dernières mises à jour

Agents IA

  • Préréglages d'agent : faites tourner côte à côte plusieurs CLI compatibles. Chaque type d'agent était lié en dur à un seul exécutable ; un fork, une version nightly ou une seconde CLI parlant le même protocole n'avaient donc aucun moyen d'entrer — on modifiait les arguments de lancement d'un type existant et on perdait l'original. Un préréglage désigne désormais son propre exécutable, sa propre icône et ses propres arguments de lancement, et apparaît dans le menu de nouvelle session à côté des types intégrés. Les sessions retiennent le préréglage qui les a créées : forker l'une d'elles conserve donc le même exécutable, et un préréglage créé sur le bureau apparaît aussi sur les navigateurs appairés et les clients distants, icône comprise, parce que l'icône voyage sous forme de données et non de chemin sur une machine donnée. Les sessions existantes ne bougent pas : une base de données issue d'une version antérieure démarre exactement comme avant.

  • La carte de sous-tâche choisit le modèle et le niveau d'effort, et une seule réponse tranche partout. Quand un agent demande à lancer une sous-tâche, la carte de confirmation propose désormais le modèle et — lorsque l'agent le prend en charge — le niveau d'effort de raisonnement, préremplis depuis les arguments de lancement de la session parente, si bien que le cas courant tient en un clic. Basculer la carte sur un autre agent recalcule les deux valeurs : un nom de modèle venu d'une CLI ne peut donc plus se retrouver sur la ligne de commande d'une autre. La carte s'affiche sur tous les clients connectés, et y répondre depuis l'un la fait disparaître sur les autres ; la première réponse réserve aussi la tâche sur le serveur, si bien que confirmer sur un téléphone et sur un ordinateur dans la même seconde crée un seul worktree et une seule session enfant au lieu de deux.

Espace de travail

  • Mode miroir : une disposition partagée sur tous les clients. Le flux du terminal a toujours été partagé — un seul PTY, un seul flux d'octets — mais la disposition autour de lui ne vivait que dans le stockage du navigateur de chaque client : un navigateur ouvert depuis le réseau local affichait ses propres onglets et ses propres divisions, et réorganiser un écran ne changeait rien à l'autre. Avec le mode miroir activé, les onglets, les divisions, la session active, la sélection dans la barre latérale et les panneaux repliés sont publiés vers tous les clients et suivis par tous. C'est l'hôte qui commande l'interrupteur, depuis le panneau d'accès à distance. Réorganiser d'un côté prend effet de l'autre ; une session qui quitte la disposition de cette fenêtre est détachée et non arrêtée, si bien que suivre un pair ne met jamais fin au processus de quelqu'un ; et appliquer la disposition d'un pair ne vole pas le clavier à celui qui est en train de taper en local. Les téléphones restent à l'écart : leur navigation à deux niveaux est une interface d'une autre forme, et y recopier un arbre de divisions de bureau n'aiderait personne.

  • L'onglet Git de la barre latérale droite est devenu un client Git utilisable. Il ne faisait qu'énumérer les fichiers modifiés. Il permet désormais d'indexer et de désindexer des fichiers isolés ou des groupes entiers, d'abandonner des modifications, d'écrire un commit (y compris en amend) et de consulter l'historique avec, pour chaque commit, ses fichiers et ses diffs — le tout réparti en sections indexé, modifié, non suivi et validé, qui se replient. Les chemins sont traités depuis la racine du dépôt : une session ouverte dans un sous-répertoire agit donc bien sur les fichiers qu'elle annonce, et un HEAD détaché est signalé comme tel au lieu d'afficher une branche nommée HEAD.

Interface

  • ⌘Q pose désormais la même question que la fermeture de la fenêtre. L'entrée Quitter du menu de l'application était celle du système, qui met fin au processus sur-le-champ : appuyer sur ⌘Q sautait la confirmation d'enregistrement de l'espace de travail qu'affiche le bouton de fermeture, si bien qu'une même intention se comportait différemment selon la manière de l'exprimer. Les deux chemins passent maintenant par une seule confirmation. Si la fenêtre qui l'affiche s'est rechargée ou a planté entre-temps, un nouvel appui sur ⌘Q repose la question et se rabat sur une boîte de dialogue native, plutôt que de laisser l'application impossible à quitter.

  • Les indications de raccourci affichent les touches qui fonctionnent vraiment. Les valeurs par défaut diffèrent d'une plateforme à l'autre, et un navigateur se réserve les combinaisons ⌘/Ctrl + lettre — ⌘D met en favori, ⌘T ouvre un onglet —, si bien que sous macOS les raccourcis ⌘ de l'application n'atteignaient jamais la page lorsque VelaTerm était ouvert comme une simple URL. Les onglets de navigateur ordinaires utilisent désormais les combinaisons Ctrl+Alt sur tous les systèmes d'exploitation, tandis que les applications de bureau et les fenêtres de connexion distante conservent ⌘. Les infobulles et l'indication de l'onglet vide affichent la combinaison réellement en vigueur, y compris celle que vous avez redéfinie vous-même, au lieu d'une combinaison ⌘ figée dans le code ; et le terminal bloque exactement les combinaisons que l'application s'est réservées, si bien que redéfinir une action déplace la touche avec elle.

  • Les préréglages de police couvrent les Nerd Fonts et le CJK, et une police personnalisée absente du système le dit. La liste des préréglages accueille désormais les familles Nerd Font et CJK courantes, et une police saisie à la main est réaffichée puis vérifiée : si le système ne la possède pas, la page des réglages le signale au lieu de retomber en silence sur une police par défaut qui ne ressemble en rien à ce que vous aviez demandé.

  • Les champs de texte sous macOS ne mettent plus de majuscules et ne corrigent plus ce que vous tapez. La mise en majuscule automatique, la correction automatique et la vérification orthographique du système s'appliquaient à chaque champ de saisie de l'application, y compris les noms de session et les champs de commande, où « npm » devenait « Npm ». Elles sont désormais désactivées partout.

Windows

  • La saisie en chinois, en japonais ou en coréen réaffiche le texte de composition et la fenêtre de candidats. Les deux étaient invisibles : on tapait à l'aveugle et on ne voyait le résultat qu'après avoir appuyé sur Entrée. Deux de nos propres règles CSS en étaient responsables : le conteneur du calque de composition s'effondrait à une largeur nulle, et le décalage right de ce calque s'y résolvait à rien du tout. La fenêtre de candidats suivait, puisque le système d'exploitation la positionne d'après le rectangle du calque. Le calque est de nouveau dessiné, aux couleurs de l'application, et le champ de saisie invisible qui le porte relâche sa géométrie dès la fin de la composition : cliquer et glisser sur cette zone atteint donc le terminal, et non plus un élément vide qui la recouvrait sans cesse.

  • La barre de titre native suit le réglage clair/sombre. L'application conserve la barre de titre du système, et Windows la peint en clair tant qu'on ne lui dit pas le contraire : une interface sombre portait donc un bandeau blanc au-dessus d'elle. Elle s'accorde désormais à l'application, y compris pour les fenêtres ouvertes plus tard comme les fenêtres SSH et de connexion distante. Choisir « suivre le système » rend la main au système d'exploitation au lieu de figer une valeur.

  • Le carré parasite au démarrage à froid a disparu. Le plugin d'instance unique crée une fenêtre de messages cachée sans jamais lui donner la transparence que son propre style annonçait ; Windows agrandissait donc parfois cette fenêtre de taille nulle jusqu'à sa taille minimale et peignait un petit carré pendant le démarrage. Elle est maintenant correctement transparente ; le comportement d'instance unique est inchangé.

Performances

  • L'accès à distance charge bien moins de choses au premier affichage. Les ressources statiques sont désormais compressées à la demande et servies avec des validateurs de cache : une seconde visite revalide au lieu de tout retélécharger, et les paquets de langue ainsi que les moteurs de rendu optionnels du terminal ne se chargent que lorsque quelque chose en a besoin, au lieu de faire partie du premier envoi. Au total, le transfert initial tombe à environ un cinquième de ce qu'il était.

Corrections

  • Une session enfant démarre désormais comme la session qui l'a demandée. Les sessions enfants n'héritaient ni du mode d'autorisation ni des arguments de lancement de leur parent : l'enfant d'une session lancée en ignorant les confirmations les redemandait, et un modèle fixé sur le parent était perdu. Les deux sont désormais hérités, avec repli sur les valeurs par défaut globales du type d'agent — les mêmes que celles qu'applique le menu « Nouvelle session d'agent ».

  • Reconnecter une fenêtre distante ne signale plus un faux « échec d'authentification ». À la reconnexion, le nouveau WebSocket et celui qu'il remplaçait se faisaient la course ; la fermeture du perdant était signalée comme un échec d'authentification, et la bannière accusait un appairage parfaitement valide d'avoir été refusé.

  • Un groupe ne peut plus être glissé dans son propre sous-arbre. Déposer un groupe sur l'un de ses propres descendants détachait toute cette branche de l'arborescence, et les sessions qu'elle contenait disparaissaient de la barre latérale jusqu'à réparation manuelle de la base de données. Le déplacement est désormais refusé.

  • La sortie des agents garde ses couleurs quand VelaTerm est lancé depuis un autre outil. Un terminal hérite de l'environnement de ce qui l'a démarré : lancer VelaTerm depuis un IDE ou un harnais d'agent qui exporte NO_COLOR, CI ou FORCE_COLOR=0 rendait donc monochrome toute TUI d'agent à l'intérieur de VelaTerm, alors même que le terminal annonce la couleur complète. Ces valeurs héritées sont écartées au démarrage d'une session ; les mêmes variables exportées depuis votre propre profil de shell continuent de s'appliquer, puisque ce profil s'exécute à l'intérieur de la session.

v0.1.101

Dernières mises à jour

Accès à distance

  • Choisissez l’adresse utilisée par le lien de partage — les adresses Tailscale apparaissent désormais. La liste d’adresses n’acceptait que les plages IPv4 privées classiques ; les maillages VPN comme Tailscale, qui attribuent des adresses de la plage NAT d’opérateur (100.64.0.0/10), étaient donc silencieusement écartés du panneau d’accès à distance et du lien d’appairage, alors que le serveur y était déjà joignable. Ces adresses sont désormais listées ; les tunnels VPN sont classés en dernier afin de ne jamais devenir la valeur par défaut. Un nouveau sélecteur d’IP dans le panneau — visible avant le démarrage comme pendant l’exécution — affiche chaque candidate avec le nom de son interface et signale les tunnels VPN ; en choisir une place son URL en tête et régénère le lien d’appairage avec exactement cet hôte, si bien que le lien copié fonctionne sur un appareil qui n’atteint cette machine que par le VPN, sans modifier l’URL à la main. Un code QR sous le lien d’appairage se scanne directement avec le téléphone. Le choix est mémorisé ; si l’interface choisie disparaît, le panneau revient à « Automatique » sans l’oublier. Le serveur lui-même est inchangé et continue d’écouter sur toutes les interfaces. Choisir une adresse apparue seulement après le démarrage du serveur — un VPN connecté plus tard, par exemple — met désormais aussi à jour immédiatement l’URL copiée et le code QR, au lieu du seul lien d’appairage jusqu’au prochain redémarrage ; les tunnels VPN restent derrière les adresses LAN sur toutes les plateformes, une adresse choisie serveur arrêté détermine le tout premier lien d’appairage après le démarrage, et des régénérations de lien qui se chevauchent ne peuvent plus écraser un lien plus récent par un plus ancien.

  • Le partage survit désormais à un redémarrage. Le jeton d'appairage était régénéré à chaque démarrage du serveur : fermer puis rouvrir VelaTerm invalidait silencieusement tous les liens partagés, et chaque téléphone devait être appairé à nouveau. Le jeton, les appareils appairés et la liste des appareils bloqués sont désormais enregistrés dans un fichier du répertoire de données lisible uniquement par son propriétaire : un appareil déjà appairé se reconnecte avec son URL enregistrée après un redémarrage — le mot de passe d'accès reste un second facteur obligatoire — et un appareil révoqué reste révoqué. VelaTerm se souvient aussi que le partage était actif : quittez l'application pendant que le serveur tourne, et le prochain lancement le relance sur le même port, dans l'application de bureau comme sur un serveur sans interface avec --serve ; arrêtez-le vous-même, et rien ne démarre automatiquement. Si le démarrage automatique échoue, par exemple parce que le port est occupé, l'application démarre normalement et le panneau d'accès à distance en affiche la raison. Le champ du port retient désormais le port réellement utilisé au lieu de revenir à la valeur par défaut, et « Régénérer le lien » reste le coupe-circuit explicite : il émet immédiatement un nouveau jeton, invalide tous les anciens liens et écrase l'état enregistré. Le mot de passe d'accès lui-même n'est jamais écrit sur le disque — seul un hachage exigeant en mémoire (Argon2id) est conservé.

Sécurité

  • Un appareil appairé ne peut plus administrer le partage lui-même. N'importe quel navigateur appairé pouvait appeler les mêmes commandes d'administration que l'application de bureau — créer un nouveau lien d'appairage (ce qui vide aussi la liste de blocage des appareils), lister et révoquer d'autres appareils, ou arrêter et reconfigurer le serveur — et le magasin de réglages livrait à chaque client la table complète des réglages, y compris le hachage à mémoire dure du mot de passe d'accès et les réglages de démarrage automatique lus au prochain lancement. Les commandes d'administration sont désormais réservées à l'application de bureau et au shell Electron ; l'API des réglages filtre les clés d'accès à distance et le jeton Gitea de chaque lecture venant d'un appareil appairé et refuse les écritures sur ces clés. Un appareil appairé conserve ce pour quoi l'appairage existe — ses sessions de terminal avec accès complet au shell — mais il ne peut plus lire le vérificateur du mot de passe, inviter ou évincer d'autres appareils, ni détourner le port que le prochain démarrage utilisera. Les commandes qui lisent, écrivent ou suppriment des secrets enregistrés — le jeton Gitea et les mots de passe d'hôte mémorisés — sont désormais refusées elles aussi pour un appareil appairé, et les commandes qui prennent un chemin — lecture, aperçu, écriture, création, renommage et suppression, de même que l'affichage du diff git d'un fichier ou le choix du dossier où cloner un dépôt — résolvent d'abord les liens symboliques et rejettent les chemins situés dans le répertoire de données de VelaTerm, où résident l'état d'appairage et les clés ; tout autre chemin continue de fonctionner, si bien que la navigation et l'édition de fichiers à distance restent intactes. Un test énumère chaque commande distante qui accepte un chemin, si bien qu'une nouvelle commande ne peut pas contourner ce contrôle sans être remarquée. Quand l'une de ces protections rejette une requête, le navigateur affiche désormais un message correctement traduit au lieu d'une erreur brute en anglais.

  • Une révocation ou un lien régénéré survit désormais aussi à la configuration à double instance. Sur un serveur sans interface (--serve) avec démarrage automatique activé, deux instances du serveur détenaient chacune leur propre copie de l'état d'appairage enregistré et le réécrivaient en entier : une révocation ou un nouveau lien passé par l'une pouvait être défait en silence par l'autre. Toutes les instances d'un même processus partagent désormais un seul état d'appairage par répertoire de données : révocation et rotation prennent effet partout immédiatement, et exactement un écrivain persiste le fichier, qui reste la source de vérité entre les vrais redémarrages.

  • Les connexions échouées répétées sont freinées. La vérification du mot de passe d'accès utilise Argon2id, volontairement coûteux — et quiconque atteint le port peut essayer. Après cinq échecs depuis une même adresse, les tentatives suivantes sont rejetées pendant une minute avant tout travail de hachage, et le hachage lui-même s'exécute désormais hors de la boucle d'événements du serveur, avec un plafond strict de vérifications simultanées : un déluge de mauvais mots de passe ne peut plus saturer le serveur de hachage à mémoire dure ni le ralentir pour les appareils déjà connectés. Le frein vit en mémoire et se réinitialise avec le serveur ; le jeton d'appairage et le mot de passe restent la véritable barrière. La limite est désormais partagée par toutes les instances du serveur utilisant le même répertoire de données — la configuration à double instance avec --serve ne double plus le budget de tentatives — et chaque tentative est réservée avant le début de la vérification du mot de passe, de sorte que des requêtes parallèles venant d'une même adresse ne puissent pas passer sous la limite. Un navigateur freiné voit désormais un message dédié de limitation sur l'écran de connexion au lieu de s'entendre dire que le mot de passe était faux ; le freinage n'est en outre plus mémorisé comme un mot de passe erroné : la pause passée, la tentative suivante aboutit de nouveau sans recharger la page. Une tentative abandonnée en cours de route — l'onglet fermé pendant que le mot de passe était encore vérifié — libère désormais immédiatement sa réservation au lieu de compter contre l'adresse pour le reste de la minute, et une connexion réussie ne libère que sa propre réservation au lieu d'effacer tout l'historique de l'adresse : derrière une adresse réseau partagée, une connexion correcte ne remet plus à zéro le budget de tentatives d'un attaquant, et les échecs enregistrés n'expirent qu'avec leur minute.

  • Les secrets sur disque et dans les journaux sont traités avec plus de soin. Le fichier de l'état d'appairage et la clé de chiffrement de bout en bout sont désormais créés lisibles par le seul propriétaire dès l'origine, au lieu d'être restreints après la première écriture, et la base de données de sessions — qui contient le hachage du mot de passe — est elle aussi restreinte au propriétaire. Un serveur sans interface (--serve) n'imprime plus le secret longue durée du lien d'appairage dans les journaux : si la sortie n'est pas un terminal, le lien est retenu et une indication s'affiche à la place ; --print-pairing le réactive explicitement. Le registre des appareils est plafonné à 32 entrées aux noms de longueur limitée, afin qu'un client appairé ne puisse pas faire grossir le fichier enregistré sans limite, et si l'enregistrement d'une révocation ou d'un nouveau lien échoue, l'erreur remonte désormais à l'appelant au lieu de finir dans une ligne de journal. Le démarrage automatique ne remplace plus un serveur déjà lancé à la main, et une erreur de démarrage automatique périmée disparaît dès que vous arrêtez le serveur vous-même.

Corrections

  • L'appairage peut désormais être géré depuis le shell Electron. La création d'un lien d'appairage, la liste des appareils appairés et la révocation d'un appareil n'existaient que comme commandes de bureau (Tauri) ; le répartiteur WebSocket utilisé par le shell Electron et les clients navigateur répondait « Unknown command », laissant le panneau d'accès distant inopérant à cet endroit. Les trois commandes passent désormais par les mêmes fonctions centrales sur les deux transports, si bien qu'elles ne peuvent plus diverger, et des tests de régression couvrent les nouvelles routes de répartition — y compris la création d'un véritable lien d'appairage auprès d'un serveur local en cours d'exécution.

v0.1.100

Dernières mises à jour

Agents IA

  • Kiro CLI devient un type de session de premier plan. Les sessions Kiro disposent de leur propre nœud dans l'arborescence, d'une pastille d'état Travail/Attente faisant autorité et pilotée par les lifecycle hooks de Kiro lui-même, de notifications à la fin d'un tour, de la reprise automatique de la même conversation à la réouverture du nœud, d'arguments de lancement et d'une option pour ignorer les confirmations, ainsi que du lancement via vspawn — tout ce dont les autres agents disposaient déjà. VelaTerm clone votre agent Kiro par défaut vers son propre agent vlx-term, ajoute à la copie des lifecycle hooks en observation seule, puis lance celle-ci : votre propre fichier d'agent n'est jamais modifié, et votre invite, vos outils et vos serveurs MCP suivent sans changement. Kiro ne dispose d'aucun hook de demande d'autorisation, si bien que la pastille reste sur Travail pendant qu'il attend votre accord.

Corrections

  • Les programmes lancés depuis le terminal n'héritent plus de l'environnement propre à l'AppImage (Linux). Le lanceur AppImage fait pointer PYTHONHOME, PYTHONPATH, PERLLIB, QT_PLUGIN_PATH et les chemins de plugins GStreamer vers le répertoire de montage temporaire du bundle, et place les répertoires du bundle avant tout le reste dans PATH et LD_LIBRARY_PATH. Un terminal transmet tout son environnement au shell qu'il démarre : le python3 du système cherchait donc sa bibliothèque standard à l'intérieur du bundle et refusait purement et simplement de s'exécuter, tandis que d'autres programmes liés dynamiquement chargeaient la copie d'une bibliothèque fournie par le bundle plutôt que celle du système. VelaTerm retire désormais ces chemins du bundle avant de démarrer un shell ou un outil externe, et laisse intactes les valeurs que vous avez définies vous-même. APPDIR et APPIMAGE restent visibles, si bien que les programmes qui vérifient s'ils s'exécutent depuis une AppImage obtiennent toujours leur réponse. Seules les versions AppImage étaient concernées ; le paquet deb, macOS et Windows se comportent comme avant.

v0.1.99

Dernières mises à jour

Terminal

  • Shift+Entrée insère un saut de ligne au lieu d'envoyer. Les terminaux ne disposent d'aucun encodage pour Entrée avec une touche de modification : les CLI d'agents comme Claude Code et Codex ne recevaient qu'un retour chariot ordinaire et envoyaient l'invite alors qu'on était encore en train de l'écrire. VelaTerm émet désormais ESC+CR, la séquence même que ces outils attendent d'une correspondance de touches iTerm2, ce qui rend les saisies multilignes utilisables — y compris sur macOS, où le gestionnaire de touches personnalisé n'était tout simplement pas installé. La composition dans une méthode de saisie reste inchangée : Entrée valide toujours le candidat.

Projets et organisation

  • Actualiser l'état d'une seule session. Dans un volet filtré par état, les sessions disposent d'une action « Actualiser l'état » qui réévalue uniquement cette session selon les conditions propres au volet, l'ajoutant ou la retirant tandis que toutes les autres restent en place. L'action appartient au volet depuis lequel le menu a été ouvert, si bien que les divisions imbriquées n'empruntent jamais le filtre d'un autre volet. Le résultat est conservé par volet et restauré après un redémarrage.
  • Retirer un marqueur ne demande qu'un clic. Choisir l'emoji déjà appliqué le supprime, ce qui rend inutiles l'entrée dédiée au retrait et son séparateur. La pastille emoji du bouton de filtre disparaît elle aussi : la mise en évidence indique déjà qu'un filtre par marqueur est actif, et le menu précise lequel.

Corrections

  • L'intégration au bureau de l'AppImage Linux s'installe sur n'importe quelle machine. L'icône fournie était un lien symbolique vers un chemin absolu de la machine de compilation ; des outils comme Gear Lever et AppImageLauncher ne parvenaient donc pas à l'extraire, alors même que l'application fonctionnait normalement. Le lien est désormais relatif. L'exigence glibc annoncée a également été corrigée à 2.35 après mesure des bibliothèques fournies et non du seul exécutable, ce qui fait d'Ubuntu 22.04 la plus ancienne distribution prise en charge par l'application de bureau.

v0.1.98

Dernières mises à jour

Agents IA

  • Grok Build devient un agent de premier plan dans VelaTerm. Installez, lancez et reprenez Grok 4.5 avec des identifiants de session stables, les lifecycle hooks officiels, des états de travail et d’autorisation précis, des transcriptions fusionnées, le détail de l’utilisation et une icône officielle adaptée au thème, de façon cohérente sur ordinateur, navigateur et mobile.

Projets et organisation

  • Divisez la barre latérale des projets en vues de travail indépendantes. Chaque volet de l’arborescence peut à nouveau être divisé vers le bas et retrouve après redémarrage sa recherche, ses filtres d’état et d’emoji, son état de repli et son ratio de redimensionnement. Tous les volets restent des projections de la même arborescence gérée par le backend : les modifications se synchronisent sans dupliquer les données métier.
  • Marquez et filtrez les nœuds sans perdre leur contexte. Les projets, groupes et sessions peuvent porter des marqueurs emoji. Un conteneur marqué conserve tout son sous-arbre, l’appartenance aux états reste stable pendant le travail, l’ajout dynamique et l’actualisation manuelle sont disponibles, et les conditions d’état et d’emoji sont réunies par union.
  • Créez un projet vide sur place. Choisissez le répertoire parent, validez le nom, puis créez et importez le dossier dans un même parcours. En cas d’échec partiel, seule l’importation est relancée, sans créer de répertoire en double.

Interface

  • Partagez VelaTerm là où se trouve votre communauté. La boîte de dialogue prend désormais en charge WeChat Moments, Weibo, Xiaohongshu, X, Reddit, Hacker News, LinkedIn, Facebook, Telegram et WhatsApp, avec un parcours par code QR pour WeChat et une invitation au partage dans la fenêtre de mise à jour.
  • Des interactions plus soignées jusque dans les détails. Les onglets de terminal temporaires peuvent être renommés avant de devenir des sessions enregistrées. Les champs ordinaires désactivent la mise en majuscule automatique des claviers mobiles sans modifier la saisie dans le terminal.

v0.1.97

Dernières mises à jour

Agents IA

  • Les sessions ne restent plus bloquées sur « en cours ». Codex signalait l’activité des outils et la fin d’un tour depuis des processus éphémères distincts, dont les rappels pouvaient arriver dans le désordre et laisser un tour terminé affiché comme encore en cours. Les rapports intermédiaires arrivant après la fin de leur propre tour sont désormais ignorés, et un nouveau hook de fin de session couvre les sessions qui se terminent sans événement de complétion.
  • Les tours interrompus se stabilisent en quelques secondes. Appuyer sur Esc, ou une erreur de flux, met fin à un tour Claude ou Codex sans le moindre rappel de complétion. Six secondes de silence du terminal corrigent maintenant discrètement une telle session en attente, sans déclencher de notification « a répondu ».

Interface

  • Raccourcis de division fiables sous macOS. Diviser à droite (Cmd+D) et diviser vers le bas (Cmd+Shift+D) sont désormais enregistrés comme commandes du menu Terminal natif, si bien que macOS n’intercepte plus la combinaison avant VelaTerm.
  • Un seul enregistrement par frappe. Cmd+S était traité à la fois par le raccourci global et par l’éditeur actif, ce qui pouvait écrire deux fois le même fichier en une seule frappe.

v0.1.96

Dernières mises à jour

Agents IA

  • L’état de Codex repose sur les lifecycle hooks, pas sur des suppositions tirées du terminal. Les sessions Codex récentes utilisent désormais uniquement les lifecycle hooks officiels comme source d’activité. Une poignée de main SessionStart vérifie la liaison, l’absence de rappel affiche « État indisponible », et le texte ou l’activité du terminal ne peut plus écraser les états de travail, de confirmation ou de fin.
  • Une utilisation Codex plus fraîche après chaque tour. Le panneau Info affiche immédiatement le snapshot rollout local, le rapproche des limites en direct, actualise à nouveau après l’écriture du snapshot token final par Codex et ignore les réponses tardives d’une ancienne session.

Interface

  • Ciblage fiable dans l’arborescence des projets sous macOS. Les lignes virtuelles ne dépendent plus des transform du compositeur, ce qui empêche d’anciennes coordonnées de hit-test WKWebView d’envoyer le survol, le clic ou le glisser vers une autre ligne après un défilement ou une mise à jour de l’arborescence.

v0.1.95

Dernières mises à jour

Agents IA

  • Kimi Code et Zoo Code rejoignent l’arborescence des sessions. VelaTerm peut désormais lancer, reprendre, installer et configurer ces deux agents. Kimi utilise ses lifecycle hooks officiels pour signaler précisément les états de travail, d’autorisation et d’attente ; Zoo Code conserve un identifiant de tâche stable et utilise la détection du terminal en l’absence de hooks externes.
  • Actualisation en direct de l’utilisation Codex. Le panneau Info interroge le Codex app server pour obtenir les limites actuelles, avec repli compatible sur l’instantané rollout local.

Projets et terminaux

  • Ouvrez un projet avec vela <path>. Les versions empaquetées peuvent installer une commande shell à la manière de VS Code. Un second appel transmet le projet à la fenêtre VelaTerm existante au lieu d’ouvrir une instance en double.
  • Clonage Git visible et annulable. Clone Project affiche les étapes Git, le pourcentage et le temps écoulé, avertit en cas de blocage et peut arrêter tout l’arbre de processus Git sans laisser de cible incomplète. Les identifiants et query tokens sont masqués dans les erreurs et journaux d’audit.
  • Terminaux WSL sous Windows. Toutes les distributions WSL installées sont proposées avec PowerShell, cmd et Git Bash pour les terminaux ordinaires. Les agents restent dans le shell hôte Windows afin de préserver la fiabilité des hooks et des chemins exécutables.

Interface et fiabilité

  • Contrôle plus clair des sessions en arrière-plan. Les menus affichent l’état en direct de chaque session et la boîte de dépassement de limite peut fermer plusieurs onglets sélectionnés à la fois.
  • Cycle de vie plus sûr et notes multilingues. Une confirmation précède l’arrêt des sessions actives ; l’identité lifecycle exacte de Codex prime sur les scans rollout ambigus ; les notes de mise à jour couvrent toutes les langues intégrées.

v0.1.94

Dernières mises à jour

Localization

  • Interface en vietnamien. Tiếng Việt est désormais disponible dans le sélecteur de langue et est sélectionné automatiquement pour les localisations vietnamiennes du système.

Navigateur

  • Démarrage plus rapide dans le navigateur intégré. Chaque onglet de navigateur dispose désormais de raccourcis en un clic pour ChatGPT, Claude, Gemini et Google. Les menus contextuels de projet et de groupe peuvent également créer une page de navigateur permanente directement dans cette partie de l’arbre de session.

Images et documents

  • Collage fiable des chemins d’image sur macOS. Lorsque WebKit ne expose pas une image copiée en tant que fichier, VelaTerm la lit depuis le presse-papiers natif et la télécharge néanmoins en tant que chemin de fichier, au lieu de passer silencieusement à un placeholder d’image natif de l’agent. Les fenêtres distantes affichent toujours la configuration de collage d’image, expliquent pourquoi le mode chemin de fichier est requis, et désactivent l’option native indisponible.

  • Coller des images dans les documents sources. L’éditeur source accepte désormais les images du presse-papiers. Les documents Markdown enregistrés les stockent à côté du document sous assets/ et insèrent une syntaxe d’image Markdown portable ; les brouillons non enregistrés incorporent les données de l’image afin qu’elles ne soient pas perdues lors du nettoyage des fichiers temporaires.

Interface

  • Les menus contextuels restent visibles et ciblent le bon élément. Les menus ouverts près du bord droit sont mesurés et déplacés correctement. Un clic droit sur un nœud d’arbre met désormais en surbrillance uniquement l’élément ciblé par le menu sans modifier la sélection existante, et les menus de groupe incluent une console limitée à ce groupe.

  • Édition et étiquettes d’état plus propres. Le texte source ne rend plus de ligatures de police ressemblant à des flèches pour des séquences telles que les commentaires HTML, les pourcentages d’utilisation sont explicitement étiquetés comme utilisés, et le menu contextuel natif non pertinent du WebView hôte n’apparaît plus derrière les menus propres à VelaTerm.

Corrections

  • Codex reste dans l’historique normal de la console. Les sessions Codex lancées par VelaTerm utilisent désormais le mode console en ligne, de sorte que la pression sur Esc pour interrompre ou revenir en arrière ne change plus les buffers d’écran de la console et ne fait pas basculer la vue de défilement en haut. Votre propre configuration Codex reste inchangée.

v0.1.93

Dernières mises à jour

Mises à jour

  • Voir ce qui a changé avant d’installer. Lorsqu’une nouvelle version est disponible, un indicateur dans la barre d’état et une boîte de dialogue dédiée affichent désormais les notes de version. Vous pouvez mettre à jour immédiatement, sauter cette version, continuer à télécharger en arrière-plan, ou ouvrir manuellement le téléchargement de l’installateur ; l’avancement est affiché en temps réel et l’application redémarre pour finaliser l’opération. Si vous avez sauté plusieurs versions, les notes de chacune d’entre elles sont affichées ensemble, et non seulement celles de la dernière version.

Agents IA

  • Les sessions Codex se nomment elles-mêmes. Une session Codex est renommée dès votre premier message, de la même manière que les sessions Claude l’étaient déjà — ainsi, l’arbre n’est plus rempli de "Codex 1", "Codex 2". Un nom que vous avez défini manuellement n’est jamais écrasé.

  • vspawn et vopen fonctionnent désormais aussi dans Codex. Les compétences intégrées vspawn, vspawn-tree et vopen sont installées dans le répertoire des compétences de Codex ainsi que dans celui de Claude, de sorte que $vspawn <task> et $vopen <file> fonctionnent depuis une session Codex.

  • Reprise plus fiable de Codex. La capture d’une conversation Codex pour une reprise ultérieure ne dépend plus d’un délai fixe, donc elle fonctionne toujours même si vous faites une pause avant d’écrire le premier message ; de plus, deux sessions Codex lancées dans le même dossier ne peuvent plus être reliées entre elles par une conversation commune.

  • Utilisation du modèle et du contexte pour Codex. Le panneau Info affiche désormais le modèle actuel, l’utilisation de la fenêtre de contexte et l’outil en cours d’exécution pour les sessions Codex, tout comme c’était déjà le cas pour Claude, en lisant en temps réel les informations fournies par la session.

Distants et console

  • Navigateur de fichiers distant reconstruit. Le sélecteur de dossiers pour les sessions distantes dispose désormais de recherche en temps réel, d’un accès direct au chemin (avec ~), de navigation vers le haut / le début / les derniers fichiers, ainsi que d’une fonction Nouveau dossier en ligne.

  • Les liens s’ouvrent sur votre propre machine. Un clic sur un lien dans la console — y compris un lien de connexion à un agent — s’ouvre désormais dans votre navigateur local, y compris depuis les fenêtres distantes.

  • L’option « réutiliser la base de données distante » est cachée. Elle n’apparaît que lorsque vous cliquez avec la touche Option/Alt sur « Se connecter au distant » ; un clic normal se connecte toujours à une base de données indépendante.

Corrections

  • Les outils sont trouvés lorsqu’ils sont lancés depuis le Dock. Lancer VelaTerm depuis le Dock ou le Finder ne le laisse plus avec une version simplifiée de PATH ; ainsi, git et les autres outils installés via Homebrew dont les agents ont besoin sont localisés correctement.

  • De nouvelles consoles s’ouvrent dans le bon dossier. Créer une console à partir d’un projet ou d’un groupe dans la barre latérale l’ouvre désormais dans le répertoire de ce nœud, au lieu de réutiliser le dossier de la dernière session active.

v0.1.92

Dernières mises à jour

Corrections

  • Plus d’avertissements faux de « lien SSH perdu ». Le moniteur de tunnel traitait auparavant la fin du processus enfant de port-forwarding comme une perte de lien, affichant une bannière rouge et reconstruisant le tunnel. En réalité, l’écouteur de redirection se trouve dans le processus ControlMaster, donc la redirection continue de fonctionner après la fin du processus enfant — la console reste parfaitement utilisable tandis que l’interface affichait que le lien était down, et la reconstruction détruisait inutilement une connexion valide.

Le lien est désormais vérifié en deux étapes : lorsque le processus enfant se termine, VelaTerm vérifie d’abord si le port de redirection local possède encore un écouteur. S’il y en a un, rien ne se passe. Ce n’est que lorsque le port a également disparu que le lien est considéré comme mort et reconstruit. La bannière rouge est également déboussolée — elle n’apparaît que après l’échec de la première tentative de reconstruction, de sorte qu’un problème qui se résout en quelques secondes ne provoque plus d’avertissement.

Les déconnexions réelles se rétablissent toujours automatiquement. Si le processus ControlMaster est arrêté ou que le réseau disparaît pendant une longue période, le tunnel se reconstruit automatiquement ; une fois les tentatives de réconnection épuisées, l’affichage passe à « SSH link is down », et Reconnect restaure alors la session — les processus distants continuent de fonctionner et reprennent là où ils s’étaient arrêtés.

v0.1.91

Dernières mises à jour

Première version publique. Tout ce qui suit est inclus dans cette version.

Les agents AI en tant que composants principaux

  • Soutien intégré pour neuf agents — Claude Code, Codex, OpenCode, Copilot CLI, Cursor CLI, Cline, Pi, Antigravity (Gemini CLI) et crush. Choisissez un type lors de la création d’une session, et elle démarre prête à l’emploi.

  • L’état de l’agent est rapporté, non deviné. VelaTerm insère le mécanisme de rappel officiel de chaque fournisseur au démarrage (hooks pour Claude, notify pour Codex, un plugin pour OpenCode, etc.), de sorte que chaque changement d’état est transmis immédiatement. L’arbre de session affiche un point indiquant l’état « en cours », « en attente » ou « terminé mais non consulté » ; la barre latérale filtre par état et la barre d’état affiche un comptage en temps réel.

  • Des notifications système sont déclenchées lorsque un agent a besoin d’une décision de permission ou termine une tâche, et un clic dessus vous amène directement à cette session. La détection d’écran sert de solution de secours pour tout agent sans mécanisme de rappel.

  • Les conversations survivent à tout. L’ID de session propre à chaque agent est capturé et stocké, de sorte que fermer une session, redémarrer l’application ou restaurer une session archivée permet de reprendre la conversation originale — après vérification de son existence. Claude Code, Codex et Pi peuvent également créer une session parallèle à partir de la conversation actuelle.

  • Les sessions génèrent des sessions. Les sous-tâches deviennent des sessions enfants, générées soit par l’agent lui-même, soit par vous, éventuellement dans un worktree git isolé afin que plusieurs agents puissent travailler sur le même répertoire en même temps. Un dialogue de fusion graphique réunit les branches une fois le travail terminé.

  • Les agents manquants reçoivent une carte d’installation avec une commande recommandée et une installation en un clic, suivie d’une découverte automatique du chemin. Un panneau latéral affiche les quotas d’utilisation de Claude et Codex, et toute conversation peut être consultée sur place ou exportée sous forme de transcription complète Markdown.

Organisation des sessions

  • Un arbre à trois niveaux — projet, groupe, session — avec un nombre illimité de niveaux de groupe et des sessions enfants sous les sessions. Les nœuds peuvent être déplacés librement et l’état plié persiste après les redémarrages.

  • Tout sous-arbre peut être archivé : il est caché dans le panneau d’archive sans suppression des données, peut être restauré à tout moment et continue de pouvoir reprendre sa conversation.

  • Recherche de contenu globale (⌘⇧F) assurée par un index SQLite FTS5 couvrant à la fois les transcriptions des agents et les sorties de terminal, avec un arbre des résultats à gauche, une prévisualisation liée à droite, et une navigation pas à pas entre les sessions.

Un terminal correct, en premier lieu

  • Un vrai PTYs (portable-pty, provenant de wezterm), de sorte que vim, htop et les interfaces TUI des agents fonctionnent exactement comme prévu.

  • Plusieurs onglets avec des divisions arbitraires — chaque onglet possède son propre arbre de division, divisé horizontalement ou verticalement selon vos préférences.

  • Cycle de vie des onglets de style navigateur : les onglets en arrière-plan restent actifs et leurs processus continuent de fonctionner, le budget d’onglets actifs est configurable, et son dépassement entraîne la fermeture de la session inactive la plus ancienne. La fermeture d’un onglet met fin au processus correspondant.

  • La saisie reste réactive même sous charge, grâce à un planification par priorité d’entrée et à un regroupement des frames de sortie — un agent qui inonde l’écran ne vous fait plus perdre de caractères.

  • Recherche dans le terminal (⌘F), enregistrement et lecture des sessions, collage ou glisser-déposer d’images directement vers un agent, et basculement gratuit entre cmd, PowerShell et Git Bash sur Windows.

Au-delà du terminal

  • Exécutez vopen <file> dans n’importe quelle session pour ouvrir une page de document à côté de vos terminaux : Markdown s’ouvre en tant qu’éditeur WYSIWYG et exporte vers PDF vectoriel, les images s’ouvrent dans le visualiseur intégré, et les fichiers sources bénéficient d’un soulignement syntaxique.

  • Un onglet navigateur intégré peut être utilisé comme onglet temporaire ou fixé dans l’arbre de projet en tant que nœud permanent.

Distanciel et multi-appareils

  • L’application desktop propose la même interface via le web, partageant un ensemble unique de sessions en temps réel. Les flux de sortie sont envoyés à chaque client en temps réel et n’importe lequel d’eux peut taper — le desktop et le navigateur voient et contrôlent le même terminal.

  • Chiffrement de bout en bout avec un boîtier NaCl par frame, association par code QR ou lien, et gestion par appareil incluant une révocation individuelle.

  • Mode sans interface graphique : --serve exécute le même service sur un serveur sans GUI, prêt pour une connexion depuis un navigateur.

  • Les connexions SSH distantes ajoutent des machines distantes à votre arbre. VelaTerm se connecte directement depuis le desktop, déploie un vela-server léger du côté distant, et les sessions distantes se comportent comme des sessions locales. Le tunnel se répare et se reconnecte automatiquement.

  • Mobile : le service inclut une vue web mobile, ainsi qu’un noyau d’application native (affichage xterm avec entrée native et barre de touches d’accès).

Plateforme et finitions

  • macOS, Linux et Windows.

  • Mises à jour automatiques, avec des versions macOS notariées.

  • Thèmes clair et foncé suivant le système, et les sessions d’agents en cours sont informées du changement via la notification de terminal standard (DEC 2031) — les couleurs de l’interface TUI changent instantanément, sans besoin de redémarrage.

  • Anglais par défaut, avec 10 langues intégrées suivant la configuration locale du système.

Chaque version inclut des mises à jour automatiques — VelaTerm proposera automatiquement la dernière version. Téléchargez-la vous-même depuis la page de téléchargement.