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
initrestent 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
.tsnommé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.mddu 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é derepairsdit 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 viaresponseet 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,TaskStatusetSteeringMode, affichage des placeholders comme<name>et des types d’autres modules sans qualificatifimport("…"). 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()etFirecrackerOptionsne 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 deoutpost init.agentVersions,DoctorAgent, le bootstrap distant,outpost doctor, les questions et la validation deoutpost init, lerun.tsgé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 deagentVersionssont désormais typéesstring, 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, etcreateSessionBundleConversations(profile)pour celles qui conservent chaque session dans un dossier, avec des hooks autonomesvalidate,bucketetrelocateexécutés dans la sandbox.createClaudeConversations(),createCodexConversations(),createCopilotConversations()etcreateKimiConversations()renvoient les stores intégrés, qui implémentent le nouveau contratNativeConversationStoreavecdirectory()etdestination(). Les presets intégrés renseignent désormaisstorageavec leur store natif par défaut, etAgentAdapter.conversationsest supprimé. Changement cassant :createTransportConversations()prend un store de base au lieu d’un nom de format, et les helpers indexés par formatconversations.native,locate,capture,restore,directory,destinationetclaudePathsont supprimés ; utilisez le store natif de chaque agent.ConversationFormatdevientstringetStoredConversationFormatest 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.mdet 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éclarationsdefine*. Les fonctions qui construisent des objets d’exécution deviennentcreateAgent,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,createEd25519DecisionVerifieretcreateOpenTelemetryObserver. Les déclarations de workflow deviennentdefineWorkflow,defineTask,defineAgentTask,defineIsolatedTask,defineCommandTask,defineApprovalTask,definePauseTask,defineArtifactTask,defineQueuedTask,defineInteractiveAgentTasketdefineLoopTask;response.text/response.jsondeviennentdefineTextResponse/defineJsonResponse, etartifact.json/artifact.binarydeviennentdefineJsonArtifact/defineBinaryArtifact. Changement cassant : les anciens noms, y compris ceux des sous-chemins providers, OpenTelemetry, S3 et BullMQ et les objetsresponseetartifact, 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 devientcreateCustomReporter(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 dansmaxLateMs.serveTriggers()reçoit des webhooks vérifiés parcreateGithubWebhook(),createGitlabWebhook()(jeton de signature, ou jeton en clair sur demande explicite),createSlackSource()(commandes slash et interactions) etcreateStandardWebhook(), avec rotation des secrets et limites de corps, et publie le job choisi par chaque route soustrigger:<path>:<delivery>, si bien que les relivraisons n’ajoutent rien.labelAdded()etcommandIssued()lisent les charges courantes.defineWorkflowJob()exécute le workflow de chaque job sous le checkpoint de sonrunId, 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 erreurquotaouunavailablelisté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.fallbacket le nouvel événement d’agentfallbackenregistrent le passage de relais, et l’usage inclut les candidats en échec. Les continuations etattach()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,onQuotamet la tâche en pause et la tentative reprise relance le brief depuis le premier candidat.DispatchOptions.agent,SandboxOptions.agentetSpeculativeCandidate.agentacceptent la nouvelle unionDispatchAgentetAgentEventgagnefallback; mettez à jour les consommateurs exhaustifs. - Rejoue les passages de relais : un tour enregistré suivi d’un événement
fallbackest lu comme passé en relais, exposé parReplayTurn.handoveravec son usage enregistré, etcreateReplayAgentenchaî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é, sansresult.fallback. - Ajoute
unavailableFault()etAgentAdapter.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ésormaisdetails.unavailableen conservant leur codeprocessouprovider. 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()etDispatchOptions.steeringpour 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énementsubagent, ou la boucle principale avecnull. Claude Code la lit sur son stdin--input-format stream-json. Codex s’exécute encodex app-serverpour les dispatchs pilotés et la reçoit avecturn/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’erreursteering. 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()etReplayTurn.resumedBy/interrupted. Nouveaux : événement d’agentsteer, raisonstoppedsteered,Turn.interrupted,AgentAdapter.liveInputavecAgentLiveSession,AgentInput.liveInput,Command.inputetSandboxLease.liveInput. Mettez à jour les traitements exhaustifs d’AgentEvent, deFaultCodeet 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 deturn/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()etcreateKimiHarness()pour capturer, reprendre et forker les sessions via n’importe quelConversationStore, par exemplecreateTransportConversations(), sans les captures locales.outpostdu dépôt.ConversationStoregagne unformatoptionnel, déclaré par les stores intégrés : les presets etcreateHarness()refusent dès leur création un store dont le format diffère du leur, et Claude et Codex refusentconversationsavecsaveConversations: 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 changedlorsque 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 avecEPERM, et un verrou libéré par un autre écrivain n’échoue plus avecEPERMpendant que Windows termine la suppression de son fichier. - Ajoute les serveurs MCP avec
mcpServerssur chaque harness CLI et surcreateHarness(). Un serveur est unecommandstdio ou uneurlStreamable HTTP ; les secrets sont transmis par nom viavariablesoubearerTokenVariableet 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 formemcp__<serveur>__<outil>; il exige un bail avecSandboxLease.liveInput, que tous les fournisseurs intégrés définissent.AgentAdapter.configurationplanifie 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 etstartupTimeoutMsborne 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, etoauth: { clientIdVariable, clientSecretVariable, scopes }permet au harness intégré de demander des jetons OAuth client credentials depuis la sandbox. Le harness intégré ajoutemcp_list_resources,mcp_read_resource,mcp_list_promptsetmcp_get_promptpour les serveurs qui proposent ressources ou prompts, etdefineMcpPrompt()rend un prompt de serveur dans les instructions ; les réparations de réponse démarrent désormais aussi les serveurs MCP.AgentConfigurationgagne des fichiershost,ConfigurationFile.sectiondevient facultatif etHarnessInstructionContextgagnemcp. 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 })etrepositoryFingerprint(). Une correspondance restaure le résultat JSON sans perte enregistré, sans tentative, sans usage ni rejeu des effets de bord ;loopTaskacceptecache, tandis que gates, interactions,agentTasketisolatedTaskle refusent. Les erreurs du store et les entrées invalides se réduisent à un miss sans changer le résultat de la tâche.TaskRecordajoutecacheHit,WorkflowEventajoute le typecacheaveccacheeterror,StorageCategoryNameajoutetask-cacheet les politiques de rétention acceptent le périmètretask-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 dansmaxWaitMsest attendue dans le processus, sinon un démarrage ultérieur avec le même checkpoint la reprend.TaskRecordajoutequotaetWorkflowEventajoute le typequotaetresetAt; 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.quotaexpose la conversation capturée et la branche conservée à la première tentative après la pause.agentTasketisolatedTaskla reprennent avec une courte consigne sauf avecquotaResume: "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.quotasignale la limite du handler etqueuedTaskrejette avec le codequota. La première tentative après une pause publie un nouveau job,<clé>:quota:<tentative>, etQueueRequest.idempotencyKeyconserve la clé d’effet du handler. - Signale les candidats arrêtés par une limite avec le statut de spéculation
quotaetSpeculationResult.quota;SpeculativeCandidateResult.statusetSpeculationResult.statusajoutentquota, 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’agentquota,AgentAdapter.quotaetquotaFault(). Les signaux de limite de Claude Code, Codex, Copilot, Kimi et Antigravity reclassent les tours en échec deprocessversquota, 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 codequotaau lieu deprovider, conserventretryAfterMset ajoutentresetAt; adapter les traitements qui reconnaissaient les limites de débit parprovider. 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é viaReplayDivergence(ou des avertissements avecdivergence: "warn").logging.replayableenregistre 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.Agentajoute la varianteReplayAgent,FaultCodeajoutereplay,ObservationEventajouteworkspace-commitsetdispatch-finishedun champerroroptionnel ; 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
TaskStatusetWorkflowResult.statusavecwaiting-input, etWorkflowEvent.typeavecinput-request/input-answer. Les producteurs de résultats doivent fournirinputRequests; les consommateurs traitant exhaustivement les statuts doivent intégrer ces ajouts. - Ajoute
loopTaskpour les cycles essai/vérification bornés avec feedback, reprise durable par phase, budgets cumulés, clés d’idempotence par phase etLoopTaskExhausted.WorkflowEvent.typeajouteloop; 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: falsedans les dispatchs, workflows, spéculations et checkpoints. Un budget de workflow exclusivement en tokens échoue avecWorkflowUsageUnavailablesi 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
doctoret 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.jsonstocke le jeton du compte sélectionné dans un objet avec un champtoken, 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 utiliseregion: "global"par défaut ; les comptes chinois doivent sélectionner explicitementregion: "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. SupprimefileArtifactStore,fileWorkflowCheckpointStore, leurs types d’options,logging.fileetDispatchResult.log; les journaux exposentlogReference. 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/varsur macOS, et refusent toujours les liens créés par l’utilisateur. - Renomme
CustomHarnessenHarnessetCustomHarnessOptionsenHarnessOptions; l’ancienne unionHarnessdevientAgentHarness(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? }parauthentication: "account" | "usage" | { account: { file | key | variable } } | { usage: { key | variable } }sur chaque harness CLI, avec les nouveaux typesAccountCredentialetUsageCredential. 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()devientcredentials(variables), qui renvoie unCredentialPlan. outpost init --authenticationaccepteaccount,account-token(Claude et Copilot) ouusageet choisitaccountpar 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.geminietdoctor --agent geminisont supprimés, et les images générées n’installent plus@google/gemini-cli.
Authentification unifiée des CLI :
accountcopie la session hôte de la CLI dans le home privé de la sandbox :.credentials.jsonde Claude (seulementclaudeAiOauth),auth.jsonde Codex, le fichier de jeton OAuth d’Antigravity, le jeton Copilot enregistré dansconfig.json(transmis enCOPILOT_GITHUB_TOKEN), et les credentials et l’identifiant d’appareil de Kimi Code suivis dekimi logindans la sandbox.CLAUDE_CONFIG_DIR,CODEX_HOME,COPILOT_HOMEetKIMI_CODE_HOMEdéplacent les sources hôte, etaccount.filesélectionne un profil dédié.usagetransmet la variable de clé API standard de la CLI :ANTHROPIC_API_KEY,OPENAI_API_KEYsuivie decodex login --with-api-keydans la sandbox,GEMINI_API_KEYavec unsettings.jsonAntigravity généré, ouKIMI_API_KEYtraduite en variables de modèle Kimi avec un modèle obligatoire. Codex avec unmodelProviderpersonnalisé n’accepte que les formes usage, appliquées àapiKeyEnvironment. Les jetons classiquesghp_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()etkimiHarness()avecAntigravitySettings,CopilotSettingsetKimiSettings. 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.doctoraccepteantigravity,copilotetkimi. - 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
agyavec le script officiel d’Antigravity dans/usr/local/bin, et le bootstrap distant lance ce même script lorsqueagymanque ;agyn’est pas épinglé. Les images définissentXDG_CACHE_HOME=/tmp/.cachepour que Copilot charge son addon natif hors du homenoexec. - 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 presetscodexHarness(),claudeHarness()etgeminiHarness(). - Accepte le modèle sous forme de nom ou d’objet
AgentModelavecreasoningetmaxOutputTokens;agent.modeldevient un objet normalisé.reasoningquitteclaudeHarness()etcodexHarness(), etmaxOutputTokensquitteanthropicModelProvider(). 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--effortetCLAUDE_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 ensandboxProvideret 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
openaiModelProvideret ajouteanthropicModelProvider.
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’erreurlimitsur 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
stopReasonnormalisée, un cache du préfixe système et de l’historique, et un streaming optionnel viastream(),timeoutMsmesurant 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()etdefineHarnessInstructions(). - Ajoute
defineHarnessHook()poursession-start,before-model,after-model,before-tool,after-tooletstop, etdefineHarnessPermissions()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 parresources(). 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()etharnessShellTools(). - Enregistre les passes des harness personnalisés dans des transcriptions en ajout seul sous
.outpost/conversations/harness/, exclues de Git, avecharnessConversations()par défaut outransportConversations("harness", …). Les harness personnalisés prennent en charge continuation, fork et réparations de réponse. AjoutedefineHarnessContextStrategy(),truncateToolResults()etsummarizeHistory(). - 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,compactionettext-delta; les journaux ne gardenttext-deltaqu’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 contratWorkflowTelemetryindépendant du SDK, des observateurs personnalisés séparés et des erreurs de callback isolées. Préserve la compatibilité avecobserve: telemetry.observe. - Instrumente les dispatchs complets avec la télémétrie OpenTelemetry optionnelle et ajoute
createReporter()avec handlers asynchrones typés etflush()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/bullmqpour 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-buildpermet 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
CodexModelProvideravec URL Responses personnalisée et nom de variable de clé API ; exposer--base-url,--api-key-envet--modeldans 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
yoloavec--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
pausedetrejected, et le statut du workflow avecpaused; 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,TaskContextetWorkflowResultdoivent fournir respectivementdiagnose,reportUsageetusage; les observateurs exhaustifs doivent traiter les nouveaux événementsattemptetusage. 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 --checksumsavec 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 --directorydes 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 --locksavec 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 --gitavec 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 inspectpour 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 --imageau 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 doctoravec 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 --repositorypour 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.tset 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.