Aller au contenu
English

Historique des versions

Les nouveautés, corrections et changements de chaque version d’Outpost.

Traduction du journal CHANGELOG.md conservé à la racine du dépôt. Chaque version publiée possède ses notes dans les deux langues.

  • Ajouter les décisions System One typées (defineDecision, decide, defineDecisionTask) et un provider HTTP borné commun à Jev et aux endpoints Laya compatibles. Conserver distributions natives, métadonnées et diagnostics de troncature d’entrée.
  • Ajouter le routage du modèle par étape au harness intégré, y compris aux sous-agents, avec politiques explicites de confiance et de repli, usage cumulé du routeur et transcripts de version 2 compatibles avec la version 1.
  • Documenter décisions et routage en français et en anglais, avec contrats de référence publics et tests déterministes HTTP, workflow et conversations.
  • Accepter l’arrondi cumulé à quatre décimales des distributions et scores pondérés natifs sans renormalisation, tout en continuant à refuser les réponses incohérentes.
  • Ajouter l’exemple System One exécutable, avec décisions directes et workflow typé contre un serveur Laya local ou un endpoint compatible authentifié.
  • Annoncer la prise en charge de System One dans un bandeau indigo bilingue. Afficher un bouton logo carré, des boutons Guide/API de même largeur avec icônes, les liens de sources colorés au survol et une recherche alignée sur la bordure du contenu sur les grands écrans.
  • Ouvrir /reference/ sur le premier symbole alphabétique de l’API. Supprimer les vues d’ensemble des familles et rediriger leurs anciennes URL vers les pages pratiques correspondantes du Guide.
  • Retirer la roadmap du dépôt et conserver la trace de sa suppression dans l’audit de migration documentaire. Garder les limites de validation dans les guides et les notes de version.
  • Fixer la dépendance transitive documentaire source-map-js à la version corrigée 1.2.2.

La release v9.1.0 a été bloquée par l’audit des dépendances documentaires et n’a pas été publiée.

Les décisions directes et tâches de décision ont été exercées avec un serveur Laya 0.3.28 local sur CPU. L’inférence réelle Jev et le routage de modèles conversationnels restent à valider ; les suites ordinaires utilisent des fixtures locales déterministes.

  • Refaire l’accueil bilingue de la documentation avec un hero occupant la hauteur de l’écran, un parcours en quatre étapes et une grille de neuf fonctionnalités liées au Guide. Montrer un workflow d’export CSV de taille moyenne avec tests et revue en parallèle, corrections bornées et validation humaine.
  • Ajouter un favicon, des aperçus sociaux localisés, les métadonnées de référencement et les données structurées de l’accueil, ainsi qu’un endpoint robots.
  • Remplacer les sorties console directes des snippets du Guide, de l’accueil et du README par des reporters et des commentaires montrant le résultat attendu. Vérifier les types du reporter partagé et exécuter les exemples hors ligne dans les deux langues.
  • Masquer les barres de défilement des onglets et snippets de code tout en conservant le défilement horizontal, le déplacement à la souris et la navigation au clavier.
  • Inclure le reporter partagé lors de l’exécution des exemples documentaires en conteneurs réels dans les deux langues.

Les contrats publics de la bibliothèque et le comportement d’exécution restent inchangés.

  • Réécrit le Guide en français et en anglais avec des titres et des explications plus clairs. L’installation recommandée consiste à construire une image d’agent, puis à importer Outpost dans ses propres fichiers TypeScript ; les projets générés avec init restent une option. Les définitions des options et des propriétés sont accessibles par des liens vers leurs contrats dans l’API, sans être répétées dans le Guide.
  • Limite les blocs de code du Guide à 20 lignes, répartit les exemples plus longs dans des fichiers .ts nommés et présentés en onglets, et place leurs explications à côté. Les onglets défilent horizontalement, à la souris ou par cliquer-glisser, pour que chaque fichier reste accessible.
  • Remplace les schémas de flux du Guide par des canvas déplaçables et zoomables, ajoute des icônes aux cartes, étend les encadrés à toute la section de contenu et donne la même largeur aux actions de navigation en bas de page. Réduit l’espacement dans la barre latérale.
  • Repense l’accueil bilingue autour de ce que les développeurs peuvent réaliser avec Outpost, avec un point de départ clair, de courts exemples utilisables, des cas d’usage illustrés et un canvas. Réutilise la mise en page et les composants du Guide, et régénère le contenu au démarrage et à la compilation du site pour obtenir le même rendu en développement et en production.
  • Garde uniquement Guide et API dans la barre de navigation. L’historique des versions s’ouvre exclusivement depuis le bouton de version, y compris sur mobile, et la roadmap reste dans le fichier roadmap.md du dépôt. Le survol du bouton de version couvre toute sa cellule ; les boutons Guide/API gardent leur taille pendant le chargement des polices et le changement de page.

Les contrats publics et le comportement de la bibliothèque restent inchangés.

  • Nouveau cas d’usage de workflow de développement, qui mène un ticket jusqu’à une branche relue : un agent interroge le responsable et planifie, le responsable approuve le plan, puis des agents écrivent des tests qui échouent et le code qui les fait passer sous le regard d’un agent relecteur, tandis que le workflow vérifie chaque étape et fait chaque commit. Il remplace la recette « Écrire une spécification avec un humain », dont l’URL redirige vers lui.
  • Quatre chapitres du Guide s’ouvrent sur une page de vue d’ensemble — isolation, workflows typés, exécutions sans surveillance, observer et récupérer — qui présente les choix du chapitre avant ses pages détaillées. Les flux dessinés dans les pages du Guide peuvent désormais être déplacés et zoomés.
  • L’espace Référence s’intitule « API » dans l’en-tête, la barre latérale et le fil d’Ariane, dans les deux langues ; ses URL restent sous /reference/. La barre latérale liste chaque symbole public par ordre alphabétique avec l’icône de son genre, et la carte des familles avec chaque vue d’ensemble passe sur l’accueil de la référence.
  • La page d’accueil présente la commande d’installation de chaque gestionnaire de paquets dans des onglets. Les contrats publics de la bibliothèque sont inchangés.
  • Sur la page d’accueil, le brief de la réponse typée demande désormais la forme qu’il attend. Il porte <verdict>{"approved": true, "reasons": []}</verdict>, si bien que le schéma, la demande et la réponse balisée de l’agent s’accordent : Outpost transmet un brief sans le modifier et n’ajoute aucune consigne de format, donc un brief qui ne montre pas la forme attendue est un brief que l’agent ne peut pas satisfaire. Un commentaire à côté de repairs dit ce que l’option apporte : deux tours de plus pour corriger une réponse rejetée par le schéma, sur la même conversation.
  • Refonte de la page d’accueil de la documentation en parcours pour le développeur qui se demande s’il installe : le titre tient sur une seule règle, la commande d’installation porte ses prérequis et la première commande à lancer, et un appel dispatch() repris d’un extrait vérifié par le typage montre une tâche de bout en bout. La page se lit ensuite ainsi : ce que l’on peut exécuter, le dessin comparatif, les agents et les sandboxes qui l’exécutent, l’argument ouvert par ce dessin, les réponses typées, puis les cas où Outpost n’est pas la réponse.
  • La comparaison des orchestrations argumente désormais en chiffres. Deux voies, « Le modèle orchestre » et « Votre code orchestre », jouent quatre temps ; chaque étape affiche sa durée — 0,6 s pour une étape du modèle, 0,9 s pour un tour d’agent, 0,1 s pour le code, lues dans un seul module de constantes pour qu’aucun chiffre ne contredise un autre — et le cumul fait du temps Reprise un chiffre : le modèle monte de 2,4 s à 3,6 s parce qu’il relit deux étapes, tandis que la voie du code reste à 1,2 s parce qu’une étape restaurée n’exécute rien. La jauge de contexte du modèle passe à l’ambre au-delà de la moitié et au rouge au-delà des trois quarts, là où la voie du code reste à un quart. L’enchaînement boucle, repart du temps cliqué, se met en attente au survol et au focus, garde son bouton de pause explicite et s’affiche fixe quand les animations sont réduites.
  • Le registre des difficultés suit ce dessin au lieu de le répéter : une difficulté à la fois, en face du temps qui la démontre, avec une pagination de quatre repères qui se remplit sur la durée du temps en cours, une liste des quatre masquée visuellement pour les technologies d’assistance et la recherche, et la première difficulté rendue en prose fixe lorsque les scripts ne s’exécutent pas.
  • La page montre l’appel complet d’une réponse typée, et non plus son seul schéma : la déclaration Zod, le dispatch() qui la transmet via response et la valeur typée relue, découpés à la construction depuis un extrait vérifié par le typage, à côté de la réponse de l’agent en prose dont le bloc balisé s’allume au moment où il devient une donnée typée.
  • Réécriture des textes de la page d’accueil dans les deux langues pour que chacune se lise comme écrite et non traduite, sans déplacer un argument, une preuve ni un lien.
  • Firecracker n’est plus signalé comme expérimental sur la page d’accueil, où la Référence le livre déjà comme stable ; la mention n’y couvre plus que la spéculation. Les contrats publics de la bibliothèque sont inchangés.
  • Refonte de la page d’accueil de la documentation autour de « Le code orchestre. Les agents réfléchissent. » : une comparaison animée d’un pipeline orchestré par un LLM et d’un pipeline orchestré par le code, les difficultés des pipelines pilotés par un LLM face à ce que fait Outpost, un tableau montrant que seul le travail de l’agent varie d’une exécution à l’autre du même workflow, à côté du vrai contrôle qui le vérifie, et une liste compacte des agents et des sandboxes. Les deux figures se mettent en pause ou se rejouent, restent fixes quand les animations sont réduites et sont décrites pour les lecteurs d’écran. Les contrats publics de la bibliothèque sont inchangés.
  • Réécriture du Guide en anglais et en français par tâche du lecteur : douze chapitres dans l’ordre de lecture, six recettes complètes de cas d’usage, et des pages dessinées avec des cellules de fonctionnalités, des parcours de lecture, des flux et des arborescences de fichiers. Les URL du Guide déplacées redirigent vers leurs nouvelles pages.
  • Réécriture de la Référence : la vue d’ensemble de chaque famille aide à choisir entre ses points d’entrée avec des tableaux de décision et de résultats, et chaque description de symbole et de champ a été vérifiée dans le code source puis corrigée lorsqu’elle était fausse, vague ou obsolète. Chaque symbole renvoie vers sa propre page du Guide.
  • Liste des valeurs de 35 alias de type comme FaultCode, TaskStatus et SteeringMode, affichage des placeholders comme <name> et des types d’autres modules sans qualificatif import("…"). La synchronisation de la documentation refuse désormais les descriptions qu’aucune page n’utilise.
  • L’API de spéculation est marquée expérimentale dans la Référence, comme l’indiquaient les notes de la 9.0.0. Ajout d’exemples exécutables numérotés sous examples/. Les contrats publics de la bibliothèque sont inchangés.

Cette version majeure renomme les fabriques et déclarations publiques et supprime les anciens noms, modifie les contrats de conversation et de reporter, et étend les unions publiques d’événements, d’erreurs et de raisons d’arrêt. Remplacez les anciens noms par leurs équivalents create*/define*, passez un store au lieu d’un nom de format à createTransportConversations(), utilisez le store natif de chaque agent au lieu des helpers conversations indexés par format, et adaptez les traitements exhaustifs de AgentEvent (fallback, steer), FaultCode (steering) et des raisons d’arrêt (steered). Firecracker n’est plus expérimental ; la spéculation reste expérimentale. Les campagnes de validation réelle listées dans la roadmap restent à mener.

  • Sort le provider Firecracker de l’expérimental : createFirecrackerSandboxProvider() et FirecrackerOptions ne portent plus l’avertissement ni l’icône expérimentale. La préparation de l’hôte, le réseau et le superviseur root du mode jailer restent à la charge de l’opérateur ; la comptabilité des ressources du superviseur et la validation adversariale restent ouvertes.
  • Redessine la barre de navigation de la documentation sur la grille des pages : la cellule du logo s’aligne sur la barre latérale, la recherche occupe le centre, GitLab, le miroir GitHub et npm sont liés à côté de la version courante, et un seul lien bascule entre anglais et français. Sur écran étroit, les liens vers les sources passent dans le pied de la barre latérale et du menu.
  • Donne à chaque agent CLI intégré son propre dossier src/adapters/agents/<agent>/ et un descripteur dans un catalogue unique des agents : libellé, exécutable, version épinglée, export du harness, installeur, environnement d’image, diagnostics de doctor, fixtures de protocole et choix d’authentification de outpost init. agentVersions, DoctorAgent, le bootstrap distant, outpost doctor, les questions et la validation de outpost init, le run.ts généré, la recette d’image et la vérification du lock de l’image des agents en dérivent désormais, et un test contrôle chaque descripteur par rapport aux exports publics et au lock de l’image. Les projets, images et commandes de bootstrap générés sont inchangés. Les entrées de agentVersions sont désormais typées string, et les erreurs de modèle d’Antigravity utilisent le libellé Antigravity.
  • Ouvre les formats de conversation natifs à tout harness CLI. createTranscriptConversations(layout) construit un store natif pour les CLI qui conservent un transcript JSONL par conversation, et createSessionBundleConversations(profile) pour celles qui conservent chaque session dans un dossier, avec des hooks autonomes validate, bucket et relocate exécutés dans la sandbox. createClaudeConversations(), createCodexConversations(), createCopilotConversations() et createKimiConversations() renvoient les stores intégrés, qui implémentent le nouveau contrat NativeConversationStore avec directory() et destination(). Les presets intégrés renseignent désormais storage avec leur store natif par défaut, et AgentAdapter.conversations est supprimé. Changement cassant : createTransportConversations() prend un store de base au lieu d’un nom de format, et les helpers indexés par format conversations.native, locate, capture, restore, directory, destination et claudePath sont supprimés ; utilisez le store natif de chaque agent. ConversationFormat devient string et StoredConversationFormat est supprimé. Les noms de format persistés, les clés de transport et le contenu des bundles sont inchangés.
  • Reconstruit la mise en page de la documentation : les pages Guide, Référence et Projet partagent un même en-tête, une barre latérale propre à l’espace courant et un fil d’Ariane, et chaque section place son code, son contrat ou ses entrées à côté de son texte. Les pages de référence présentent paramètres et propriétés en lignes à côté d’une signature épinglée, /reference/ devient un plan des sections et familles au lieu de rediriger vers le premier symbole, et le changelog et la roadmap gardent chaque titre à côté de ses entrées.
  • Remplace l’accueil de la documentation par une page d’accueil en anglais et en français : le slogan avec la commande d’installation et « Commencer », une fenêtre de code avec run.ts, brief.md et un workflow d’exemple, les agents et sandboxes avec leur prise en charge des conversations, et une présentation d’un workflow qui met en évidence le code de chaque étape. Ses snippets sont vérifiés par TypeScript avec les exemples du guide, et la marque de la documentation affiche désormais le logo d’Outpost et mène à cette page.
  • Nomme les constructeurs create* et les déclarations define*. Les fonctions qui construisent des objets d’exécution deviennent createAgent, createFallbackAgent, createReplayAgent, createHarness, createClaudeHarness, createCodexHarness, createAntigravityHarness, createCopilotHarness, createKimiHarness, createHarnessFileTools, createHarnessEditTools, createHarnessSearchTools, createHarnessGitTools, createHarnessShellTools, createDockerSandboxProvider, createPodmanSandboxProvider, createLocalSandboxProvider, createVercelSandboxProvider, createDaytonaSandboxProvider, createFirecrackerSandboxProvider, createMountedSandboxProvider, createRemoteSandboxProvider, createLocalTransport, createS3Transport, createArtifactStore, createWorkflowCheckpointStore, createTaskCacheStore, createTransportConversations, createHarnessConversations, createSqliteTaskQueue, createHttpTaskQueue, createBullMQTaskQueue, createOpenAIModelProvider, createAnthropicModelProvider, createEd25519DecisionVerifier et createOpenTelemetryObserver. Les déclarations de workflow deviennent defineWorkflow, defineTask, defineAgentTask, defineIsolatedTask, defineCommandTask, defineApprovalTask, definePauseTask, defineArtifactTask, defineQueuedTask, defineInteractiveAgentTask et defineLoopTask ; response.text/response.json deviennent defineTextResponse/defineJsonResponse, et artifact.json/artifact.binary deviennent defineJsonArtifact/defineBinaryArtifact. Changement cassant : les anciens noms, y compris ceux des sous-chemins providers, OpenTelemetry, S3 et BullMQ et les objets response et artifact, ne sont plus exportés ; les anciennes URL de référence redirigent vers les nouvelles pages. Changement cassant : createReporter() crée désormais le reporter de terminal auparavant nommé reporter(), et le reporter à handlers devient createCustomReporter(handlers, options). Les starters générés utilisent les nouveaux noms.
  • Ajoute des déclencheurs qui lancent des workflows via une file. createCronSchedule() évalue des expressions cron à cinq champs et des macros dans un fuseau horaire IANA, en ignorant les heures supprimées par l’heure d’été et en déclenchant une seule fois les heures répétées ; runSchedules() publie un job par créneau, identifié schedule:<name>:<créneau> pour que réplicas et redémarrages convergent, et ne rattrape que le dernier créneau dans maxLateMs. serveTriggers() reçoit des webhooks vérifiés par createGithubWebhook(), createGitlabWebhook() (jeton de signature, ou jeton en clair sur demande explicite), createSlackSource() (commandes slash et interactions) et createStandardWebhook(), avec rotation des secrets et limites de corps, et publie le job choisi par chaque route sous trigger:<path>:<delivery>, si bien que les relivraisons n’ajoutent rien. labelAdded() et commandIssued() lisent les charges courantes. defineWorkflowJob() exécute le workflow de chaque job sous le checkpoint de son runId, avec une version qui inclut une empreinte de l’entrée, et indique le statut, les gates en attente et cette version. Outpost n’appelle pas les API GitHub, GitLab ou Slack, les approbations de gates depuis ces services ne sont pas fournies, et les tests utilisent des signatures calculées localement.
  • Ajoute createFallbackAgent([...agents], { on }) : une liste ordonnée d’agents ou de modèles qui confie un dispatch au candidat suivant lorsque le candidat courant échoue avec une erreur quota ou unavailable listée. Les candidats s’exécutent dans le même sandbox et le même workspace à partir du brief d’origine, ne sont préparés que lorsqu’ils sont essayés et conservent leurs conversations capturées ; DispatchResult.fallback et le nouvel événement d’agent fallback enregistrent le passage de relais, et l’usage inclut les candidats en échec. Les continuations et attach() exigent un agent unique. Lorsque tous les candidats atteignent une limite, l’erreur de quota indique la réinitialisation la plus proche connue pour tous, onQuota met la tâche en pause et la tentative reprise relance le brief depuis le premier candidat. DispatchOptions.agent, SandboxOptions.agent et SpeculativeCandidate.agent acceptent la nouvelle union DispatchAgent et AgentEvent gagne fallback ; mettez à jour les consommateurs exhaustifs.
  • Rejoue les passages de relais : un tour enregistré suivi d’un événement fallback est lu comme passé en relais, exposé par ReplayTurn.handover avec son usage enregistré, et createReplayAgent enchaîne sur le tour du candidat suivant dans le même appel. Le résultat rejoué reproduit le texte retenu, tous les commits et l’usage cumulé, sans result.fallback.
  • Ajoute unavailableFault() et AgentAdapter.unavailable. Les surcharges terminales, réponses 5xx et échecs de connexion de Claude Code, Codex, Copilot, Kimi et Antigravity, les HTTP 408/5xx/529 et échecs de transport des fournisseurs de modèles, ainsi que les erreurs de flux overloaded ou serveur, renseignent désormais details.unavailable en conservant leur code process ou provider. Les avis de nouvelle tentative sont ignorés et la classification de quota reste prioritaire. La classification repose sur des formats de protocole enregistrés, pas sur des campagnes de pannes réelles.
  • Ajoute createSteering() et DispatchOptions.steering pour envoyer des consignes à un agent pendant son dispatch. send() se résout avec { mode } dès que l’agent reçoit le texte. Le harness intégré l’ajoute à la requête suivante au modèle, ou au sous-agent intégré actif ; send(text, { subagent }) vise l’identifiant d’exécution d’un sous-agent issu de son événement subagent, ou la boucle principale avec null. Claude Code la lit sur son stdin --input-format stream-json. Codex s’exécute en codex app-server pour les dispatchs pilotés et la reçoit avec turn/steer. Copilot, Kimi et Antigravity sont arrêtés dès que leur conversation est connue puis repris avec la consigne. Les consignes envoyées après la réponse de l’agent reprennent la conversation dans un nouveau tour ; celles qui ne peuvent pas être remises sont rejetées avec le nouveau code d’erreur steering. Tous les fournisseurs intégrés acceptent l’entrée de commande en direct : local, Docker et Podman transmettent stdin par tube, Firecracker via SSH, et Vercel et Daytona transmettent des morceaux encadrés ajoutés à un fichier du sandbox. Le rejeu reproduit les runs pilotés tour par tour grâce à ReplayAgent.pendingSteering() et ReplayTurn.resumedBy/interrupted. Nouveaux : événement d’agent steer, raison stopped steered, Turn.interrupted, AgentAdapter.liveInput avec AgentLiveSession, AgentInput.liveInput, Command.input et SandboxLease.liveInput. Mettez à jour les traitements exhaustifs d’AgentEvent, de FaultCode et des raisons d’arrêt. L’injection Claude a été vérifiée en réel sur l’hôte, Daytona et Vercel ; l’ouverture de session app-server et la gestion des échecs de Codex ont été vérifiées avec Codex 0.155 sans exécution réelle de turn/steer ; l’interruption de Copilot, Kimi et Antigravity est couverte par des CLI simulées et un sandbox Docker réel.
  • Ajoute conversations à createClaudeHarness(), createCodexHarness(), createCopilotHarness() et createKimiHarness() pour capturer, reprendre et forker les sessions via n’importe quel ConversationStore, par exemple createTransportConversations(), sans les captures locales .outpost du dépôt. ConversationStore gagne un format optionnel, déclaré par les stores intégrés : les presets et createHarness() refusent dès leur création un store dont le format diffère du leur, et Claude et Codex refusent conversations avec saveConversations: false. createAntigravityHarness() refuse l’option. Les conversations archivées ne sont ni chiffrées ni authentifiées ; aucune exécution réelle de Kimi ou Copilot via un store Transport n’a été menée.
  • Corrige des échecs sporadiques Inspection file changed lorsque le transport local lisait un objet remplacé par un écrivain concurrent, par exemple pendant que des tâches parallèles listaient l’activité des ressources. Sous Windows, une écriture qui remplace un objet ouvert par un lecteur concurrent réessaie brièvement au lieu d’échouer avec EPERM, et un verrou libéré par un autre écrivain n’échoue plus avec EPERM pendant que Windows termine la suppression de son fichier.
  • Ajoute les serveurs MCP avec mcpServers sur chaque harness CLI et sur createHarness(). Un serveur est une command stdio ou une url Streamable HTTP ; les secrets sont transmis par nom via variables ou bearerTokenVariable et ne sont jamais écrits dans les arguments ni dans les fichiers, et une variable déclarée manquante échoue avant le démarrage de l’agent. Claude Code, Codex et Copilot reçoivent les serveurs en arguments à chaque exécution ; Kimi et Antigravity les fusionnent dans leur fichier de configuration du home en conservant les autres entrées, y compris dans votre propre home avec le fournisseur local. Le harness intégré démarre les serveurs dans la sandbox à chaque tour, via un lanceur Node.js et un pont HTTP exécuté dans la sandbox, et expose leurs outils sous la forme mcp__<serveur>__<outil> ; il exige un bail avec SandboxLease.liveInput, que tous les fournisseurs intégrés définissent. AgentAdapter.configuration planifie les fichiers de configuration des CLI, et les événements d’outils MCP de Codex portent désormais des noms qualifiés par serveur. La prise en compte réelle de la configuration générée n’a été vérifiée que pour les serveurs stdio de Copilot.
  • Étend les serveurs MCP. tools: { include, exclude } filtre les outils d’un serveur et startupTimeoutMs borne son démarrage, avec le réglage natif de chaque CLI ; une option qu’une CLI ne sait pas appliquer échoue à la composition de l’agent. oauth: "login" copie dans le home de la sandbox la connexion OAuth MCP enregistrée sur l’hôte par Claude Code, Codex ou Kimi, et oauth: { clientIdVariable, clientSecretVariable, scopes } permet au harness intégré de demander des jetons OAuth client credentials depuis la sandbox. Le harness intégré ajoute mcp_list_resources, mcp_read_resource, mcp_list_prompts et mcp_get_prompt pour les serveurs qui proposent ressources ou prompts, et defineMcpPrompt() rend un prompt de serveur dans les instructions ; les réparations de réponse démarrent désormais aussi les serveurs MCP. AgentConfiguration gagne des fichiers host, ConfigurationFile.section devient facultatif et HarnessInstructionContext gagne mcp. Les copies OAuth et les identifiants client n’ont été testés qu’avec des serveurs de test locaux.

Cette version majeure ajoute des champs obligatoires aux résultats de workflow, étend les unions publiques de statuts, d’événements, d’erreurs et de spéculation, et reclasse les limites de débit des fournisseurs de modèles. Les producteurs de résultats et doublures de test doivent fournir WorkflowResult.inputRequests ; adaptez les traitements exhaustifs de TaskStatus, WorkflowResult.status, WorkflowEvent.type, FaultCode, ObservationEvent, Agent, StorageCategoryName et des statuts de spéculation, ainsi que les traitements qui reconnaissaient les HTTP 429 par provider. Les points d’entrée existants restent disponibles. Les campagnes réelles de limites et les campagnes de modèles authentifiées pour ces ajouts restent à mener.

  • Ajoute le cache optionnel de résultats de tâches avec task({ cache: { store, version, key, maxAgeMs, mode } }), taskCacheStore({ transporter }) et repositoryFingerprint(). Une correspondance restaure le résultat JSON sans perte enregistré, sans tentative, sans usage ni rejeu des effets de bord ; loopTask accepte cache, tandis que gates, interactions, agentTask et isolatedTask le refusent. Les erreurs du store et les entrées invalides se réduisent à un miss sans changer le résultat de la tâche. TaskRecord ajoute cacheHit, WorkflowEvent ajoute le type cache avec cache et error, StorageCategoryName ajoute task-cache et les politiques de rétention acceptent le périmètre task-cache ; adapter les traitements exhaustifs. Les entrées ne sont pas authentifiées.
  • Ajoute les pauses sur quota optionnelles avec workflow.start({ onQuota: { action: "pause", maxWaitMs } }). Une erreur de quota met la tâche en pause durable au lieu de la reprendre ou de la faire échouer ; une réinitialisation connue dans maxWaitMs est attendue dans le processus, sinon un démarrage ultérieur avec le même checkpoint la reprend. TaskRecord ajoute quota et WorkflowEvent ajoute le type quota et resetAt ; adapter les traitements exhaustifs. Les heures de réinitialisation rédigées en texte ne sont pas analysées, et les relances démarrent un nouveau dispatch d’agent.
  • Poursuit la conversation interrompue par une pause sur quota : TaskContext.quota expose la conversation capturée et la branche conservée à la première tentative après la pause. agentTask et isolatedTask la reprennent avec une courte consigne sauf avec quotaResume: "restart", les workspaces isolés intégrés partent de la branche interrompue et les tâches interactives poursuivent le tour interrompu. Les agents sans reprise ni capture démarrent une nouvelle conversation.
  • Transmet les échecs de quota à travers les files : QueueResult.quota signale la limite du handler et queuedTask rejette avec le code quota. La première tentative après une pause publie un nouveau job, <clé>:quota:<tentative>, et QueueRequest.idempotencyKey conserve la clé d’effet du handler.
  • Signale les candidats arrêtés par une limite avec le statut de spéculation quota et SpeculationResult.quota ; SpeculativeCandidateResult.status et SpeculationResult.status ajoutent quota, adapter les traitements exhaustifs. Une course durable terminée sur quota relance seulement ces candidats en nouvelles tentatives depuis la baseline, sans poursuivre leur conversation.
  • Ajoute le code d’erreur quota, l’événement d’agent quota, AgentAdapter.quota et quotaFault(). Les signaux de limite de Claude Code, Codex, Copilot, Kimi et Antigravity reclassent les tours en échec de process vers quota, avec l’heure de réinitialisation lorsque Claude la fournit. Les HTTP 429 et erreurs de flux de quota des fournisseurs de modèles OpenAI et Anthropic utilisent désormais le code quota au lieu de provider, conservent retryAfterMs et ajoutent resetAt ; adapter les traitements qui reconnaissaient les limites de débit par provider. La classification repose sur les formats de protocole relevés, pas sur des campagnes réelles de limites.
  • Ajoute replayAgent() pour rejouer le journal d’un dispatch sans appeler de modèle : il réémet tour par tour les événements et l’usage enregistrés, reconstruit les commits enregistrés dans la sandbox avec leurs identités d’origine, relance les échecs de tour enregistrés et signale les écarts de prompt, de baseline, d’arbre, de journal épuisé ou non enregistré via ReplayDivergence (ou des avertissements avec divergence: "warn"). logging.replayable enregistre les commits linéaires de chaque dispatch en sandbox sous forme de patchs binaires vérifiés ; le journal contient alors du contenu du dépôt. Agent ajoute la variante ReplayAgent, FaultCode ajoute replay, ObservationEvent ajoute workspace-commits et dispatch-finished un champ error optionnel ; adapter les traitements exhaustifs.
  • Ajoute interactiveAgentTask() avec tours question/réponse durables pour le harness Outpost et les conversations CLI portables, worktrees conservés, validation des acteurs, usage cumulé et rejeu explicite des tours interrompus. Antigravity et la capture désactivée sont refusés. L’attente libère le sandbox ; la suspension dans un outil, les réponses signées et l’expiration restent prévues ultérieurement.
  • Étend TaskStatus et WorkflowResult.status avec waiting-input, et WorkflowEvent.type avec input-request/input-answer. Les producteurs de résultats doivent fournir inputRequests ; les consommateurs traitant exhaustivement les statuts doivent intégrer ces ajouts.
  • Ajoute loopTask pour les cycles essai/vérification bornés avec feedback, reprise durable par phase, budgets cumulés, clés d’idempotence par phase et LoopTaskExhausted. WorkflowEvent.type ajoute loop ; adapter les traitements exhaustifs. Les exceptions exigent une reprise explicite ; les checkpoints de boucle exigent des résultats JSON.

Cette version majeure étend les unions publiques d’événements et de conversations et ajoute des champs de contexte obligatoires. Adaptez les traitements exhaustifs de AgentEvent, WorkflowEvent.type, ModelStreamEvent, ConversationFormat et StoredConversationFormat ; les producteurs de contexte personnalisés et doublures de test doivent fournir TaskContext.idempotencyKey et QueueHandlerContext.idempotencyKey. Les points d’entrée existants restent disponibles. Les files Redis exigent désormais maxmemory-policy=noeviction et les budgets de workflow exclusivement en tokens refusent un usage incomplet. Firecracker et la spéculation restent expérimentaux ; la 7.0.0 ne réalise pas toutes les orientations de la roadmap.

  • Ajoute la spéculation durable optionnelle via Transport : propriété protégée par révisions, récupération explicite après crash, budgets cumulés, tentatives préservées, nettoyage borné et vérification de fusion Git. Docker/Podman montés permettent la réconciliation des ressources ; les providers non compatibles refusent le mode durable. La spéculation reste expérimentale.

  • Ajouter les politiques réseau Daytona confirmées, avec refus explicite des règles et capacités de compte non prises en charge ; protéger la configuration native Vercel contre les mutations de l’appelant. Ajouter des sondes réseau opt-in et la documentation bilingue des capacités et responsabilités. Les listes d’autorisation des conteneurs restent non prises en charge.

  • Ajoute des gates d’approbation/pause signés optionnels avec rotation des clés Ed25519, la rotation des identifiants HTTP à chaque requête et des clés d’idempotence stables pour tâches et workers. Documente la déduplication persistante des effets et la reprise multi-workers ; les files ne garantissent toujours pas un effet externe exactement une fois.

  • Ajoute les reprises de tâches exponentielles plafonnées et l’aléa complet en option, conserve le minimum Retry-After des modèles HTTP et expose les délais choisis. Ajoute le délai coopératif workflow.start({ timeoutMs }), renouvelé à la reprise, avec compatibilité des checkpoints et autorisation explicite du rejeu.

  • Stabilise les contrats du harness intégré et des modèles OpenAI/Anthropic, avec délégation authentifiée validée pour les deux intégrations. Ajoute defineHarnessSubagent() avec exécution sérialisée dans la sandbox partagée, historiques capturés séparés, permissions héritées, profondeur bornée et budgets de tokens cumulés des ancêtres. Compte réponses finales et résumés de contexte dans les plafonds, refuse la comptabilisation incomplète et corrèle cycle de vie et usage enfants. Ajoute une fixture conteneur déterministe en CI et une campagne réelle optionnelle avec budget.

  • Ajoute des hubs d’observation contextualisés avec récepteurs branchables bornés, événements corrélés de workflow/agent/opération, diagnostics d’arrêt, résultats d’outils CLI normalisés et contenus modèle activés explicitement. Journaux et reporters partagent la politique de livraison ; leurs erreurs sont rapportées indépendamment de l’exécution. OpenTelemetry peut consommer le flux unifié sans changer les noms de métriques.

  • Ajoute capture native, reprise à chaud/à froid et réparations pour Copilot et Kimi, ainsi que le fork natif Kimi. Antigravity permet uniquement reprise à chaud et réparations ; capture portable, reprise à froid et fork automatisé restent indisponibles. Le fork automatisé Copilot est explicitement refusé. Les bundles conservent les fichiers natifs pris en charge et peuvent être archivés par Transport.

  • Ajout du lancement Firecracker optionnel par jailer avec assets protégés appartenant à root, identité VMM non privilégiée, limites CPU/mémoire/processus par cgroup v2 et nettoyage conservateur. Le lancement direct reste compatible ; le provider reste expérimental en attente de validations plus larges des hôtes et de résistance aux attaques.

  • Épingler la CLI Antigravity 1.2.12 dans les images générées et le bootstrap distant avec des archives versionnées et des empreintes SHA-512 enregistrées. Exposer agentVersions.antigravity, la comparer dans doctor et désactiver les mises à jour automatiques dans les images générées, requêtes d’agent et diagnostics. Les binaires existants sont réutilisés ; les recettes d’images existantes doivent être actualisées puis reconstruites.

  • Collecte les tokens Copilot et Kimi depuis les fichiers de session dans la sandbox, y compris ceux des sous-agents Kimi, et réconcilie les événements Copilot sans double comptage. Les compteurs absents ou partiels portent Usage.complete: false dans les dispatchs, workflows, spéculations et checkpoints. Un budget de workflow exclusivement en tokens échoue avec WorkflowUsageUnavailable si la mesure est incomplète ; configurez un budget de tentatives et des délais d’exécution pour borner le repli.

  • Ajoute s3Transport({ deleteMode: "tombstone" }) pour les services comme R2 sans DELETE conditionnel atomique : des marqueurs PUT conditionnels bloquent suppressions périmées et recréations concurrentes, restent physiquement stockés et sont masqués des lectures et listes. Le mode DELETE conditionnel par défaut est inchangé.

  • Refuse les files BullMQ si Redis INFO ne confirme pas maxmemory-policy=noeviction, avec une erreur de configuration au lieu de permettre l’éviction de l’état des files.

  • Arrête les sondes hôte de doctor et leurs descendants lors d’une interruption, en préservant les codes de sortie SIGINT/SIGTERM.

  • Conserve un diagnostic de connexion sûr dans les erreurs de timeout des agents CLI lorsque le dernier événement d’échec signale un problème de connexion, sans recopier d’URL d’endpoint ni d’identifiants.

  • Corrige l’authentification Copilot par compte lorsque config.json stocke le jeton du compte sélectionné dans un objet avec un champ token, tout en conservant la prise en charge des jetons stockés sous forme de chaîne.

  • Corrige l’authentification des comptes Kimi Code internationaux avec kimiHarness({ authentication: "account", region: "global" }) : copie le fichier OAuth propre à la région et l’identifiant d’appareil, puis configure la même région dans la sandbox. L’authentification par compte utilise region: "global" par défaut ; les comptes chinois doivent sélectionner explicitement region: "mainland-cn". Les endpoints de compte contradictoires sont refusés pour les régions explicites comme pour celle par défaut.

  • Reconstruit entièrement le Guide anglais et français avec des explications ciblées et des snippets courts, directement utilisables. Introduit une nouvelle structure de pages, une navigation par besoin et une mise en page responsive propre au Guide.
  • Couvre l’installation, la configuration des agents, les sandboxes, les workflows, la persistance, l’observation, l’exploitation et le moteur de modèles expérimental sur 60 pages par langue. Préserve le contenu et la navigation de la Référence.
  • Redirige les anciennes URL du Guide vers leurs nouvelles destinations, y compris les liens localisés et les ancres de continuation. Vérifie les liens rendus, la recherche, la navigation et les exemples dans les deux langues.
  • Remplace la génération de préparations d’ateliers par la compilation des snippets du Guide, l’exécution hors ligne d’exemples sélectionnés et les vérifications Docker/Podman réelles de l’exemple de commande documenté. Les contrats publics de la bibliothèque restent inchangés.

Changements cassants, sans alias de compatibilité :

  • Unifie la persistance des artefacts, checkpoints, journaux, activités de ressources et réservations via Transport, avec localTransport() pour le stockage sur disque. Supprime fileArtifactStore, fileWorkflowCheckpointStore, leurs types d’options, logging.file et DispatchResult.log ; les journaux exposent logReference. Les objets d’exécution résident par défaut sous .outpost/storage. La récupération après crash des checkpoints et réservations est explicite en local comme à distance ; les anciens formats de fichiers ne sont pas migrés. Worktrees Git et préparation d’exécution restent des opérations du système de fichiers. Les transports locaux et les lectures d’inspection acceptent parmi les ancêtres les liens système appartenant à root, comme /var sur macOS, et refusent toujours les liens créés par l’utilisateur.
  • Renomme CustomHarness en Harness et CustomHarnessOptions en HarnessOptions ; l’ancienne union Harness devient AgentHarness (CliHarness | Harness). Le comportement à l’exécution et les discriminants restent inchangés.
  • Remplace les formes d’authentification { mode: "api-key" | "oauth-token" | "login", environment?, credentials? } par authentication: "account" | "usage" | { account: { file | key | variable } } | { usage: { key | variable } } sur chaque harness CLI, avec les nouveaux types AccountCredential et UsageCredential. Aucun mode automatique n’existe ; les formes non prises en charge échouent à la composition de l’agent en listant les formes acceptées. AgentAdapter.authenticate() devient credentials(variables), qui renvoie un CredentialPlan.
  • outpost init --authentication accepte account, account-token (Claude et Copilot) ou usage et choisit account par défaut ; les scripts générés ne lisent plus de fichier de credentials.
  • Retire Gemini CLI, qui ne sert plus les comptes gratuits, Google AI Pro et Ultra : geminiHarness(), GeminiSettings, agentVersions.gemini et doctor --agent gemini sont supprimés, et les images générées n’installent plus @google/gemini-cli.

Authentification unifiée des CLI :

  • account copie la session hôte de la CLI dans le home privé de la sandbox : .credentials.json de Claude (seulement claudeAiOauth), auth.json de Codex, le fichier de jeton OAuth d’Antigravity, le jeton Copilot enregistré dans config.json (transmis en COPILOT_GITHUB_TOKEN), et les credentials et l’identifiant d’appareil de Kimi Code suivis de kimi login dans la sandbox. CLAUDE_CONFIG_DIR, CODEX_HOME, COPILOT_HOME et KIMI_CODE_HOME déplacent les sources hôte, et account.file sélectionne un profil dédié.
  • usage transmet la variable de clé API standard de la CLI : ANTHROPIC_API_KEY, OPENAI_API_KEY suivie de codex login --with-api-key dans la sandbox, GEMINI_API_KEY avec un settings.json Antigravity généré, ou KIMI_API_KEY traduite en variables de modèle Kimi avec un modèle obligatoire. Codex avec un modelProvider personnalisé n’accepte que les formes usage, appliquées à apiKeyEnvironment. Les jetons classiques ghp_ sont refusés pour Copilot.
  • Outpost ne lit que des fichiers hôte ordinaires d’au plus 1 Mio, ne lit jamais un trousseau système et installe les credentials via un installeur unique alimenté par stdin, avec des dossiers en 0700 et des fichiers en 0600. Le provider local ne reçoit que des variables : aucun fichier n’est écrit et aucune commande de connexion ne s’exécute sur l’hôte.

Nouveaux harness CLI :

  • Ajoute antigravityHarness(), copilotHarness() et kimiHarness() avec AntigravitySettings, CopilotSettings et KimiSettings. Ils lancent des sessions neuves sans capture native, reprise, fork ni réparation automatique des réponses, n’acceptent que des noms de modèles et désactivent par défaut les mises à jour automatiques des CLI. Copilot et Kimi ne remontent aucun usage en tokens. doctor accepte antigravity, copilot et kimi.
  • Les images générées, le verrou de l’image d’agents publiée et le bootstrap distant épinglent GitHub Copilot CLI 1.0.88 et Kimi Code 2.1.1. Les images installent agy avec le script officiel d’Antigravity dans /usr/local/bin, et le bootstrap distant lance ce même script lorsque agy manque ; agy n’est pas épinglé. Les images définissent XDG_CACHE_HOME=/tmp/.cache pour que Copilot charge son addon natif hors du home noexec.
  • Les protocoles sont couverts par des fixtures synthétiques et des contrôles d’aide des CLI installées ; les exécutions réelles de modèles des trois CLI restent à valider.

Changements cassants, sans alias de compatibilité :

  • Remplace les factories d’agents par agent({ harness, model }) et les presets codexHarness(), claudeHarness() et geminiHarness().
  • Accepte le modèle sous forme de nom ou d’objet AgentModel avec reasoning et maxOutputTokens ; agent.model devient un objet normalisé. reasoning quitte claudeHarness() et codexHarness(), et maxOutputTokens quitte anthropicModelProvider(). Le harness CLI ou le fournisseur de modèles refuse les réglages non pris en charge à la composition de l’agent : Claude Code les traduit en --effort et CLAUDE_CODE_MAX_OUTPUT_TOKENS, Codex n’accepte que le raisonnement, Gemini CLI n’accepte ni l’un ni l’autre, Anthropic exige une limite de sortie et OpenAI transmet l’effort de raisonnement.
  • Renomme les factories de sandbox en *SandboxProvider, la configuration en sandboxProvider et l’option CLI en --sandbox-provider. Les anciens enregistrements de ressources sont signalés incompatibles sans suppression.
  • Remplace le client texte direct expérimental par openaiModelProvider et ajoute anthropicModelProvider.

Moteur de harness intégré expérimental :

  • harness({ modelProvider, instructions, tools, hooks, permissions, context, conversations, skills, limits, toolExecution, cache }) permet à Outpost de piloter lui-même un modèle. Le moteur exécute les outils via le sandbox emprunté avec validation des entrées, concurrence des outils en lecture seule, délai par appel et résultats ordonnés, renvoie les erreurs d’outils au modèle et échoue avec le nouveau code d’erreur limit sur les limites d’étapes, d’appels d’outils, de tokens ou de sortie.
  • Les fournisseurs de modèles échangent messages, appels d’outils, raisonnement opaque rejoué uniquement à l’identité de fournisseur et au modèle d’origine, une stopReason normalisée, un cache du préfixe système et de l’historique, et un streaming optionnel via stream(), timeoutMs mesurant l’inactivité entre deux fragments. Les réponses tronquées ou refusées sont signalées au lieu d’être rejetées.
  • Ajoute defineHarnessTool() (entrées en sous-ensemble JSON Schema ou Standard Schema), defineHarnessToolset() et defineHarnessInstructions().
  • Ajoute defineHarnessHook() pour session-start, before-model, after-model, before-tool, after-tool et stop, et defineHarnessPermissions() pour des règles ordonnées d’autorisation et de refus sur les noms d’outils, les commandes et les chemins du dépôt déclarés par resources(). Une exception d’un hook fait échouer la passe.
  • Ajoute des jeux d’outils fournis : harnessFileTools(), harnessEditTools() avec remplacement exact et détection de conflit, harnessSearchTools(), harnessGitTools() et harnessShellTools().
  • Enregistre les passes des harness personnalisés dans des transcriptions en ajout seul sous .outpost/conversations/harness/, exclues de Git, avec harnessConversations() par défaut ou transportConversations("harness", …). Les harness personnalisés prennent en charge continuation, fork et réparations de réponse. Ajoute defineHarnessContextStrategy(), truncateToolResults() et summarizeHistory().
  • Ajoute defineHarnessSkill() pour des instructions et des outils chargés à la demande via un outil réservé load_skill.
  • Les observateurs du dispatch reçoivent les événements step, tool-result, tool-denied, stop-prevented, compaction et text-delta ; les journaux ne gardent text-delta qu’en mode verbeux.
  • Ces API sont testées avec des fournisseurs scénarisés, des services HTTP locaux simulés et le provider de sandbox local ; aucune campagne authentifiée n’est sous-entendue.

Autres changements :

  • Ajoute workflow.start({ telemetry }) avec un contrat WorkflowTelemetry indépendant du SDK, des observateurs personnalisés séparés et des erreurs de callback isolées. Préserve la compatibilité avec observe: telemetry.observe.
  • Instrumente les dispatchs complets avec la télémétrie OpenTelemetry optionnelle et ajoute createReporter() avec handlers asynchrones typés et flush() explicite.
  • Mutualise la préparation explicite de l’authentification CLI entre harness et workflows générés. Actualise les vérifications du package, exemples et références bilingues.
  • Ajouter openaiCompatible() et les contrats typés expérimentaux de fournisseurs de modèles pour des appels directs sans streaming à Chat Completions ou Responses, sans Codex. Borner les requêtes et la taille des réponses, gérer l’annulation et la consommation déclarée si présente, et refuser les sorties incomplètes ou non prises en charge. L’exécution d’outils et le harness d’agent restent prévus en deuxième phase ; la compatibilité avec les services réels n’est pas validée.

  • Ajouter une famille bilingue Fournisseurs de modèles dans la référence, avec icônes expérimentales et bandeaux générés expliquant les limites. Ajouter les mêmes avertissements à Firecracker et FirecrackerOptions.

  • Ajout des transports objet local/S3 pour les artefacts, checkpoints à propriété exclusive, journaux segmentés, snapshots de conversations natives, archives de récupération vérifiées, réservations partagées, activités des ressources et opérations distantes d’inventaire/rétention/quotas. Conservation des stores par dossier et chemins d’exécution locaux ; le SDK AWS reste optionnel. La récupération de propriété distante est explicite et les campagnes de stockage réelles authentifiées restent à effectuer.

  • Ajouter l’adaptateur optionnel @elie-laloum/outpost/queues/bullmq pour Redis standalone et BullMQ 5, avec identité des jobs, résultats JSON sans perte, baux protégés par génération, annulation et échéances. Inclure la fermeture asynchrone des connexions, des tests sur Redis réel et la référence et le guide d’exploitation bilingues.

  • Refondre la documentation bilingue avec des navigations Guide et Référence distinctes, des vues d’ensemble par famille, des descriptions API contextualisées, la conservation des URL des symboles et des redirections pour les guides déplacés. Ajouter des préparations complètes exécutables et un guide de validation des schémas couvrant Zod, Valibot et JSON Schema.

  • Regrouper les familles de référence sous cinq sections fixes avec libellés courts en anglais dans les deux langues, liens de vue d’ensemble localisés avec icônes de maison et navigation clavier sur ordinateur et mobile. Regrouper les politiques réseau avec les providers de sandbox.

  • Éviter de recréer les racines du système de fichiers lors de l’initialisation des transports locaux sous Windows et accepter les alias natifs courts ou de casse lors de l’inspection sans autoriser la traversée de liens symboliques. Préserver les transcripts enfants lors de la capture de conversations Windows, vérifier les chemins déplacés après décodage JSON et compiler la bibliothèque avant les exemples Docker/Podman documentés en CI.

  • Préserver le shell de session Daytona et le statut réel des commandes non interactives ; accepter une PTY déjà supprimée pendant le nettoyage après annulation. Ajouter les régressions des deux défauts trouvés en tests réels. Valider les workflows Claude OAuth sur Docker, Vercel et Daytona, ainsi que la saisie, le redimensionnement, la sortie, l’annulation et la réutilisation du terminal Daytona.

  • Remplacer le parsing global et l’aide manuelle du CLI par les sous-commandes Commander et leurs options propres ; utiliser les sélections Clack pour l’initialisation interactive. Les options d’autres commandes auparavant ignorées sont désormais refusées. Les sorties sans terminal et JSON restent sans décoration.

  • Guider le choix du gestionnaire de paquets et de l’authentification. Vérifier la disponibilité du gestionnaire avant écriture avec --install. Construire automatiquement les images Docker/Podman ; --no-build permet de générer les fichiers sans build. Les workflows déjà générés restent inchangés.

  • Générer les parcours explicites par clé API, jeton d’abonnement Claude et session de compte Codex. Vérifier les credentials requis avant allocation ; préparer la connexion API Codex par stdin ou copier une source de credentials de compte explicitement sélectionnée dans le home privé du sandbox. Les trousseaux hôtes ne sont pas exportés.

  • Ajouter CodexModelProvider avec URL Responses personnalisée et nom de variable de clé API ; exposer --base-url, --api-key-env et --model dans init. Les endpoints limités à Chat Completions ne sont pas pris en charge. Vérifier la connexion native Codex contre un endpoint Responses simulé local dans la CI container.

  • Conserver les variables d’allocation Vercel pour chaque commande, avec priorité aux variables de commande. Tester la transmission du jeton Claude par le script généré et documenter la conservation des variables lors d’un changement de provider.

  • Ajouter des campagnes cloud Claude/Codex authentifiées activables manuellement, avec rapports sans secrets. Les credentials absents restent ignorés ; cette fixture ne prouve pas la réussite d’une campagne sur un compte réel. Les campagnes planifiées n’appellent pas les modèles.

  • Recentrer la roadmap bilingue sur la fiabilité à court terme et les orientations à moyen terme, avec critères explicites de validation.

  • Préserver les sorties exactes des commandes Daytona grâce à un encodage en flux, pour corriger la synchronisation des chemins Git séparés par des octets nuls. Vérifier les sorties sans fin de ligne, l’Unicode, les statuts de sortie, l’annulation et la réutilisation.

  • Accorder confiance au workspace sélectionné pour les requêtes Gemini autonomes en mode yolo avec --skip-trust ; préserver les autres modes et documenter cette frontière. Clarifier la génération des workflows Codex par abonnement sur les providers locaux et cloud.

  • Valider les workflows authentifiés avec modification de fichier pour Codex par abonnement et Gemini par clé API sur Docker, Vercel et Daytona, un endpoint Responses personnalisé sur Docker et Vercel, et OpenRouter Responses sur Daytona. Le même adapter sans modification termine le parcours modèle/outils/synchronisation avec OpenRouter ; l’autre endpoint personnalisé réinitialise toujours les connexions HTTPS depuis Daytona avant authentification. Le parcours Codex par clé API n’a pas été exercé dans cette campagne.

Cette version majeure étend les unions publiques de statuts des workflows. Les consommateurs exhaustifs doivent traiter les statuts de tâche paused et rejected, ainsi que le statut de résultat de workflow paused. Les fonctionnalités de recherche restent sur activation explicite, avec leurs limites documentées.

  • Allouer les workspaces des conteneurs isolés sous un parent privé accessible en écriture pour Podman rootless, et publier les artefacts sans recréer les racines de disque Windows. Documenter la récupération manuelle des verrous de checkpoint quand la propriété du processus ne peut pas être vérifiée.

  • Créer récursivement les dossiers Vercel de workspace et les parents des destinations de transfert avant toute écriture.

  • Ajouter les réservations coopératives liées au workspace, la restauration isolée des états précédent/entrant conservés et l’inspection locale de l’activité des sandboxes et ressources.

  • Regrouper et vérifier les uploads incrémentaux de fichiers/liens ; transférer les différences d’historique Git vérifiées tout en conservant des bundles de récupération complets. Les copies de dossiers gardent leur comportement existant.

  • Persister les checkpoints avec résultats JSON, répétition explicite et consommation cumulée. Ajouter approbations/pauses et artefacts immuables typés avec filiation non signée.

  • Ajouter des files SQLite persistantes, un transport HTTP authentifié et des workers avec fencing. Les répétitions peuvent reproduire des effets ; les reçus de consommation terminale évitent le double comptage sans garantir un plafond de facturation en temps réel.

  • Étendre les statuts de tâche avec paused et rejected, et le statut du workflow avec paused ; les consommateurs exhaustifs doivent les traiter. Ajouter des méthodes optionnelles de synchronisation des checkpoints et de reçus de consommation aux contextes de tâche.

  • Prendre en charge le PTY natif Daytona avec annulation, redimensionnement et réutilisation ; la validation réelle avec compte reste à effectuer.

  • Ajouter l’adapter Gemini CLI, le bootstrap, les diagnostics et l’installation dans les images épinglés à 0.61.0. Gemini ne prend en charge que les nouvelles sessions, sans capture native, continuation ni réparation automatique des réponses.

  • Ajouter des prototypes sur activation explicite : checkouts Git Docker/Podman isolés, microVM Firecracker sur hôte préparé, blocage réseau total des conteneurs/politiques Vercel et candidats spéculatifs bornés avec validation explicite et sans intégration automatique.

  • Attribuer les rapports cloud au commit/runtime/date et conserver les preuves de vérification d’attestation d’image réussie. Campagnes cloud réelles, publication signée et démarrage Firecracker restent des validations distinctes, jamais des réussites implicites.

  • Synchroniser toute la référence API publique, les guides bilingues et la roadmap avec le comportement implémenté et les limites restantes des prototypes.

  • Canonicaliser les dossiers temporaires de vérification de récupération sur les différentes plateformes et réutiliser les volumes de cache Podman existants sans les recréer.
  • Rupture de compatibilité : les implémentations personnalisées de Sandbox, TaskContext et WorkflowResult doivent fournir respectivement diagnose, reportUsage et usage ; les observateurs exhaustifs doivent traiter les nouveaux événements attempt et usage. Les objets créés par les factories fournissent automatiquement ces membres.
  • Traiter prudemment la propriété incertaine ou ancienne des verrous ; les écritures simultanées vers un même journal configuré provoquent désormais un conflit au lieu de partager le fichier.
  • Ajouter des budgets partagés de tentatives et de consommation observée par workflow, couvrant retries et réparations agents, avec attente des tentatives admises et annulation coopérative aux limites de consommation.
  • Ajouter des événements structurés de consommation et de cycle de vie des workflows ainsi qu’une entrée OpenTelemetry optionnelle avec tracer/meter injectés, noms de spans fixes, compteurs et histogrammes de durée sans contenus ni identifiants des tâches.
  • Diagnostiquer les sandboxes détenues par l’appelant avec une opération exclusive, des probes binaires optionnelles et leur nettoyage ; distinguer capacités observées, contrats déclarés et contrôles des fixtures de protocole embarquées.
  • Ajouter des fixtures cloud sans identifiants et des vérifications Vercel/Daytona planifiées sur activation explicite, avec rapports filtrés, nettoyage indépendant et contrôles optionnels des CLI réelles ; les appels modèles authentifiés restent hors de cette suite.
  • Attendre le code de sortie des commandes Daytona après fermeture des sorties, et enregistrer le nettoyage de l’allocation avant la découverte du home.
  • Ajouter des plans explicites de rétention, un nettoyage avec revalidation et un contrôle d’admission des quotas ; protéger les artefacts de récupération, les journaux incertains et les workspaces contenant des fichiers ignorés.
  • Observer la propriété des verrous avec l’identité Linux de l’hôte, du démarrage, du namespace et du processus ; sérialiser la reprise des verrous périmés et refuser les propriétaires incertains.
  • Vérifier bundles, objets Git et applicabilité des patches conservés dans une copie isolée, sans filtres Git hérités ni modification du dépôt source.
  • Ajouter des caches de dépendances Docker/Podman optionnels, avec clés d’invalidation explicites et séparation par dépôt, image et utilisateur ; ajouter la construction d’images d’agents épinglées et un workflow de publication contrôlé avec vérification de provenance signée.
  • Télécharger les fichiers non suivis modifiés de Vercel/Daytona avec manifestes SHA-256 et lots gzip bornés ; réutiliser les fichiers inchangés vérifiés tout en conservant des sauvegardes complètes et en protégeant les fichiers hôtes ignorés.
  • Enregistrer des manifestes SHA-256 atomiques pour les nouvelles sauvegardes de transfert avant application hôte ; ajouter recovery verify --checksums avec vérification en flux bornée, résultats absents/divergents explicites et état hôte préservé si la capture échoue.
  • Ajouter les contrôles en lecture seule recovery verify --directory des métadonnées de transfert et fichiers de sauvegarde requis, avec lecture bornée et distinction explicite de l’intégrité du contenu ou d’une validation de restauration.
  • Ajouter recovery inspect --locks avec lecture bornée des métadonnées et observation locale des PID ; signaler les enregistrements invalides ou non vérifiables sans présumer la propriété ni supprimer de verrous.
  • Ajouter les rapports optionnels recovery inspect --git avec branche/HEAD détachée, état clean/dirty, verrous Git et états non enregistrés/indisponibles explicites, sans rafraîchir les index ni nettoyer le registre.
  • Ajouter les rapports en lecture seule outpost recovery inspect pour récupération, logs, verrous et workspaces gérés, avec tailles logiques issues des métadonnées, protection contre les liens symboliques et résultats partiels explicites en cas de limite ou d’erreur de parcours.
  • Vérifier l’aide des commandes agents par défaut de lancement/reprise/fork dans les images de diagnostic, en contrôlant usage et options déclarées plutôt que le seul code de sortie ; conserver explicitement l’exécution réelle et la compatibilité du protocole comme non vérifiées.
  • Étendre doctor --image au diagnostic d’une image Docker/Podman locale dans une sandbox temporaire, sans téléchargement d’image ni réseau ; distinguer versions des agents de l’image, erreurs de nettoyage et vérifications hôtes.
  • Ajouter outpost doctor avec vérifications bornées des prérequis hôtes, accès Docker/Podman, comparaison des versions des agents hôtes, capacités non vérifiées explicites et rapports JSON.
  • Normaliser le dossier du test de workflow avant de calculer les chemins relatifs des dépôts, pour corriger la CI macOS avec les dossiers temporaires symboliques.
  • Affiche la progression de l’agent dans les scripts générés et les détails de récupération lors d’une annulation, sans trace d’erreur non interceptée.
  • Documente en français et en anglais les dossiers de workflow, les chemins des dépôts et les tâches multi-dépôts.
  • Générer les projets de workflow directement dans le dossier choisi, avec run.ts, un manifeste par défaut et conservation des fichiers package/ignore existants.
  • Ajouter init --repository pour cibler un dépôt externe ; résoudre brief et environnement depuis le script et conserver l’image du workflow indépendamment du dépôt ciblé.
  • Lire les recettes d’image à la racine du workflow ; les anciennes installations peuvent utiliser --file .outpost/Dockerfile.
  • Supprimer les campagnes d’issues, les connecteurs de backlog GitHub/Beads/personnalisés et leurs types publics.
  • Simplifier l’initialisation en un script de dispatch ; retirer les modèles de campagne, --template, --tracker, --label, les fichiers de tracker et l’installation des CLI GitHub/Beads.
  • Attente de la fin des commandes non interactives et transmission du vrai code de sortie ; réutilisation du terminal du runtime en mode interactif.
  • Transfert d’archives binaires dans le conteneur Docker/Podman actif : uploads et capture/restauration des conversations voient le même home tmpfs que les agents.
  • Conservation des permissions ordinaires et liens, rejet des destinations dangereuses et compatibilité GNU tar/bsdtar.
  • Création d’un home privé inscriptible dans les images, y compris sans montage tmpfs.
  • Tests de régression sur les conteneurs réels, pseudo-terminaux, annulations, fichiers binaires et conversations natives.
  • Guides de connexion Claude Code/Codex et sept cookbooks progressifs en anglais et français.
  • Documentation Astro Starlight en anglais et français, avec anglais par défaut, guides ciblés et référence de tous les exports publics.
  • Vérification en CI des traductions, exemples TypeScript, liens, navigation et fichiers de recherche.
  • Déploiement d’un seul site GitHub Pages après les releases stables réussies, protégé contre le retour à une ancienne version.
  • Déplacement du démarrage français et de la roadmap dans le site ; conservation du changelog racine et suppression des anciennes migrations et du fichier de contribution.
  • Exclusion des outils documentaires de l’archive de la bibliothèque.
  • Alignement des métadonnées npm sur l’origine GitHub de la compilation pour la provenance. GitLab reste le dépôt source principal.
  • Séparation des adapters Claude et Codex, de la construction des commandes et du décodage ; conservation des événements inconnus comme observations brutes.
  • Découpage de l’allocation, de la propriété des opérations, du dispatch, de l’attachement, du stockage des conversations et de la récupération en services dédiés.
  • Séparation de la planification des campagnes, de l’exécution des issues et de l’intégration ; isolation de l’état, des tentatives et de l’ordonnancement des workflows.
  • Isolation de la configuration des containers, montages, commandes et transferts, adapters cloud, worktrees Git et étapes de synchronisation distante.
  • Extraction des contrats dans .types.ts et des constantes dans .constants.ts, sans changer les points d’entrée publics.
  • Contrôle en CI des dépendances, du placement des types et des déclarations inutilisées ; documentation bilingue de l’architecture.
  • Campagnes d’issues typées avec planification dynamique, concurrence bornée, branches par issue, revue dans la même sandbox, intégration vérifiée et fermeture du tracker.
  • Connecteurs complets GitHub et Beads et scripts de campagne exécutables.
  • Isolation des passes ponctuelles, validation préalable de l’annulation et des réponses structurées, conservation de la sortie brute et finale des agents.
  • Transcripts par tour, stores personnalisés, réécriture sélective des chemins et compteurs de cache Claude séparés.
  • Alignement des variables autorisées, prompts relatifs à l’appelant, collecte interactive et ordre des hooks.
  • Récupération des workspaces, actualisation des branches réutilisées et préservation des modifications locales pendant la synchronisation distante de l’historique commité.
  • Options de namespace Podman, contrôles macOS, préparation des montages de fichiers et transferts bornés.
  • Affichage de progression, journaux ajoutables, métadonnées de récupération et restauration du terminal.
  • Extension des tests fonctionnels, providers et packages ; documentation bilingue de l’évolution des contrats.

Première version d’Outpost.

  • Propriété séparée des workspaces et sandboxes, environnements réutilisables et fermeture asynchrone.
  • Adapters Codex et Claude Code avec conversations natives, reprise et fork.
  • Providers Docker, Podman, local, Vercel et Daytona, avec contrats extensibles.
  • Worktrees gérés, branches nommées, intégration automatique et récupération.
  • Synchronisation distante préservant l’identité des commits et protégeant les changements locaux concurrents.
  • Fichiers de prompt, variables typées, expansion de commandes, boucles de complétion et délais d’inactivité.
  • Réponses texte/JSON balisées, Standard Schema et réparations avec reprise.
  • Workflows typés avec conditions, tentatives, annulation, concurrence et diagrammes.
  • Initialisation interactive ou automatisée, cinq modèles et connecteurs d’issues.
  • Documentation anglais/français, tests multiplateformes, seuils de couverture et publication automatisée.