MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo310 — Checkpoint Resume
CreateInMemory reste dans le même processus après reconstruction du graphe. La requête pendante est réémise ; PrepareApprovalV1 ne doit pas être invoqué à la reprise. Ce programme ne restaure pas un checkpoint après fermeture du processus, contrairement au résumé historique du catalogue.
Objectifs
- Observer Demo310 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer le programme
Aucun modèle, embedding, conteneur ou secret nécessaire. Depuis la racine de la distribution complète. Préserver les projets partagés et les fichiers de configuration. Certains prompts et libellés historiques de Demo260–290 sont encore en français dans le code public ; les commandes et identifiants restent ceux de cette révision.
dotnet build BaseTechnique.slnx -m:1 -c Release| Projet | Rôle |
|---|---|
| demos/Demo310_CheckpointResume/Demo310.App.csproj | Application |
| shared/Maf.Durable/Maf.Durable.csproj | Implémentation partagée |
Commandes depuis la racine
dotnet run --project demos/Demo310_CheckpointResume/Demo310.App.csproj -c Release --no-build -- approveManipulations et variantes
Lancer approve puis reject. Lire le message In-memory engine state et les événements autour de la capture.
string? requestId = null;
await foreach (var evt in run.WatchStreamAsync(cancellationToken))
{
Console.WriteLine("Event: " + evt.GetType().Name);
if (evt is WorkflowErrorEvent error) throw new InvalidOperationException("Workflow failed.", error.Exception);
if (evt is RequestInfoEvent request)
{
var ticket = request.Request.Data.As<ApprovalTicket>();
if (ticket?.OperationId != operationId) throw new InvalidOperationException("Unexpected pending operation.");
requestId = request.Request.RequestId;
}
if (requestId is not null && evt is SuperStepCompletedEvent { CompletionInfo.Checkpoint: { } checkpoint })
return new(ApprovalWorkflow.Version, checkpoint.SessionId, checkpoint.CheckpointId, operationId, requestId);
}
throw new InvalidOperationException("No checkpoint containing the pending request was observed.");
Ce qui doit être observable
CreateInMemory reste dans le même processus après reconstruction du graphe. La requête pendante est réémise ; PrepareApprovalV1 ne doit pas être invoqué à la reprise. Ce programme ne restaure pas un checkpoint après fermeture du processus, contrairement au résumé historique du catalogue.
Ces résultats sont attendus à partir du code lié. Les observations effectivement rejouées pour ce lot sont distinguées dans les exercices et la réception ; aucune sortie live non mesurée n’est donnée comme observée.
Limites et état conservé
Demo300 répond dans le processus vivant ; Demo310 conserve son manager en mémoire ; seule Demo320 conserve les checkpoints sur disque pour une reprise dans un autre processus. La base SQLite existe dans les trois variantes. Unicité locale de la ligne, aucun exactly-once distribué. La CLI fait confiance à son opérateur, sans authentification de relecteur.
dotnet test tests/Maf.Durable.Tests/Maf.Durable.Tests.csproj -m:1 -c Release --no-build --no-restore