MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo380 — Role Based Tools
Le défaut accorde review.finish mais pas ticket.read : zéro ToolCall admis et code 2. complete sélectionne une autre fixture hôte, sans connexion d’un administrateur. Les anciens arguments anonymous/support/manager/admin ne sont plus le protocole de cette entrée.
Objectifs
- Observer Demo380 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer la démo
Depuis la racine de la distribution complète compilée en Release ; conserver les projets partagés et les fichiers copiés près des exécutables. Transport scripté ou heuristique par défaut : aucun modèle, embedding, secret ou conteneur nécessaire. --live sélectionne explicitement le chat commun, sans fallback cloud.
dotnet build BaseTechnique.slnx -m:1 -c Release| Projet | Rôle |
|---|---|
| demos/Demo380_RoleBasedTools/Demo380.App.csproj | Application |
| shared/Maf.Control/Maf.Control.csproj | Implémentation partagée |
Lancer depuis la racine
dotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-buildManipulations et variantes
Sans argument, prévoir PermissionDenied. Comparer ensuite complete puis forbidden. Laisser read_ticket visible pour observer le contrôle au moment de l’appel.
var live = args.Contains("--live");
string[] scenarios = ["complete", "repeat", "forbidden", "budget", "incomplete", "deadline", "changing"];
var scenario = args.FirstOrDefault(a => scenarios.Contains(a)) ?? defaultScenario;
using var caller = new CancellationTokenSource();
var capabilities = scenario == "forbidden" ? new[] { "review.finish" } : new[] { "ticket.read", "review.finish" };
var limits = new ExecutionLimits(ModelCalls: scenario == "budget" ? 1 : 6,
DeadlineSeconds: scenario == "deadline" ? 1 : 120);
using var scope = new ExecutionScope(capabilities, limits, caller.Token);
Code source · Maf.Control · Dossier
- shared/Maf.Control/Maf.Control.csproj
- demos/Demo330_BoundedHarness/Demo330.App.csproj
- demos/Demo340_LoopControl/Demo340.App.csproj
- demos/Demo380_RoleBasedTools/Demo380.App.csproj
dotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- completedotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- repeatdotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- forbiddendotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- budgetdotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- changingdotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- deadlinedotnet run --project demos/Demo380_RoleBasedTools/Demo380.App.csproj -c Release --no-build -- incompleteRésultats, refus et preuves
Le défaut accorde review.finish mais pas ticket.read : zéro ToolCall admis et code 2. complete sélectionne une autre fixture hôte, sans connexion d’un administrateur. Les anciens arguments anonymous/support/manager/admin ne sont plus le protocole de cette entrée.
Limites du contrôle
Les résultats scriptés vérifient orchestration et contrôles réels, sans qualifier un modèle ni toute attaque. Les compteurs sont par run ; aucune idempotence durable ou écriture métier. L’annulation reste coopérative.
dotnet test tests/Maf.Control.Tests/Maf.Control.Tests.csproj -m:1 -c Release --no-build --no-restore