< Summary

Information
Class: NexusLabs.Needlr.AgentFramework.AgentFrameworkGeneratedBootstrap
Assembly: NexusLabs.Needlr.AgentFramework
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.AgentFramework/AgentFrameworkGeneratedBootstrap.cs
Line coverage
75%
Covered lines: 198
Uncovered lines: 66
Coverable lines: 264
Total lines: 482
Line coverage: 75%
Branch coverage
48%
Covered branches: 48
Total branches: 98
Branch coverage: 48.9%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_FunctionTypes()100%11100%
get_GroupTypes()100%11100%
get_AgentTypes()100%11100%
get_HandoffTopology()100%11100%
get_GroupChatGroups()100%11100%
get_SequentialTopology()100%11100%
.cctor()100%11100%
RegisterAIFunctionProvider(...)100%11100%
TryGetAIFunctionProvider(...)100%22100%
RegisterGraphTopology(...)100%11100%
TryGetGraphTopology(...)0%2040%
Register(...)50%22100%
TryGetFunctionTypes(...)50%5466.66%
TryGetGroupTypes(...)75%4483.33%
TryGetAgentTypes(...)75%4483.33%
TryGetHandoffTopology(...)75%4483.33%
TryGetGroupChatGroups(...)75%4483.33%
TryGetSequentialTopology(...)75%4483.33%
BeginTestScope(...)100%66100%
EnsureCombined()40.74%1315470.21%
EnsureCombinedGraphTopology()0%4260%
.ctor(...)100%11100%
Dispose()100%11100%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.AgentFramework/AgentFrameworkGeneratedBootstrap.cs

#LineLine coverage
 1using System.Diagnostics.CodeAnalysis;
 2
 3namespace NexusLabs.Needlr.AgentFramework;
 4
 5/// <summary>
 6/// Runtime bootstrap registry for source-generated Agent Framework components.
 7/// </summary>
 8/// <remarks>
 9/// The source generator emits a <c>[ModuleInitializer]</c> in the host assembly that calls
 10/// <see cref="Register"/> with the generated type providers.
 11/// <c>UsingAgentFramework()</c> checks this bootstrap
 12/// and auto-populates function types, groups, and agent types without requiring any explicit
 13/// <c>Add*FromGenerated()</c> calls.
 14/// </remarks>
 15public static class AgentFrameworkGeneratedBootstrap
 16{
 17    private sealed class Registration
 18    {
 2219        public Registration(
 2220            Func<IReadOnlyList<Type>> functionTypes,
 2221            Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> groupTypes,
 2222            Func<IReadOnlyList<Type>> agentTypes,
 2223            Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>> handoffTopology,
 2224            Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> groupChatGroups,
 2225            Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> sequentialTopology)
 26        {
 2227            FunctionTypes = functionTypes;
 2228            GroupTypes = groupTypes;
 2229            AgentTypes = agentTypes;
 2230            HandoffTopology = handoffTopology;
 2231            GroupChatGroups = groupChatGroups;
 2232            SequentialTopology = sequentialTopology;
 2233        }
 34
 235        public Func<IReadOnlyList<Type>> FunctionTypes { get; }
 436        public Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> GroupTypes { get; }
 437        public Func<IReadOnlyList<Type>> AgentTypes { get; }
 538        public Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>> HandoffTopology 
 539        public Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> GroupChatGroups { get; }
 540        public Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> SequentialTopology { get; }
 41    }
 42
 1143    private static readonly object _gate = new();
 1144    private static readonly List<Registration> _registrations = [];
 1145    private static readonly AsyncLocal<Registration?> _asyncLocalOverride = new();
 46    private static IAIFunctionProvider? _aiFunctionProvider;
 1147    private static readonly AsyncLocal<IAIFunctionProvider?> _asyncLocalProviderOverride = new();
 1148    private static readonly List<Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>> _graphTopologyRegistratio
 1149    private static readonly AsyncLocal<Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>?> _asyncLocalGraphTo
 50    private static Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>? _cachedCombinedGraphTopology;
 51
 52    private static (
 53        Func<IReadOnlyList<Type>> Functions,
 54        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> Groups,
 55        Func<IReadOnlyList<Type>> Agents,
 56        Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>> HandoffTopology,
 57        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> GroupChatGroups,
 58        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> SequentialTopology)? _cachedCombined;
 59
 60    /// <summary>
 61    /// Registers the generated <see cref="IAIFunctionProvider"/> for this assembly.
 62    /// Called automatically by the generator-emitted <c>[ModuleInitializer]</c>.
 63    /// </summary>
 64    public static void RegisterAIFunctionProvider(IAIFunctionProvider provider)
 65    {
 1166        ArgumentNullException.ThrowIfNull(provider);
 1167        _aiFunctionProvider = provider;
 1168    }
 69
 70    /// <summary>
 71    /// Gets the registered <see cref="IAIFunctionProvider"/>, if one has been registered.
 72    /// </summary>
 73    public static bool TryGetAIFunctionProvider([NotNullWhen(true)] out IAIFunctionProvider? provider)
 74    {
 18875        var local = _asyncLocalProviderOverride.Value;
 18876        if (local is not null)
 77        {
 278            provider = local;
 279            return true;
 80        }
 81
 18682        provider = _aiFunctionProvider;
 18683        return provider is not null;
 84    }
 85
 86    /// <summary>
 87    /// Registers compile-time graph topology data for this assembly.
 88    /// Called automatically by the generator-emitted <c>[ModuleInitializer]</c>.
 89    /// </summary>
 90    public static void RegisterGraphTopology(
 91        Func<IReadOnlyDictionary<string, GraphTopologyRegistration>> graphTopology)
 92    {
 1193        ArgumentNullException.ThrowIfNull(graphTopology);
 1194        lock (_gate)
 95        {
 1196            _graphTopologyRegistrations.Add(graphTopology);
 1197            _cachedCombinedGraphTopology = null;
 1198        }
 1199    }
 100
 101    /// <summary>
 102    /// Gets the combined graph topology provider from all registered assemblies.
 103    /// </summary>
 104    public static bool TryGetGraphTopology(
 105        [NotNullWhen(true)] out Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>? provider)
 106    {
 0107        var local = _asyncLocalGraphTopologyOverride.Value;
 0108        if (local is not null)
 109        {
 0110            provider = local;
 0111            return true;
 112        }
 113
 0114        lock (_gate)
 115        {
 0116            if (_graphTopologyRegistrations.Count == 0)
 117            {
 0118                provider = null;
 0119                return false;
 120            }
 121
 0122            EnsureCombinedGraphTopology();
 0123            provider = _cachedCombinedGraphTopology;
 0124            return provider is not null;
 125        }
 0126    }
 127
 128    /// <summary>
 129    /// Registers the generated type providers for this assembly.
 130    /// Called automatically by the generator-emitted <c>[ModuleInitializer]</c>.
 131    /// </summary>
 132    public static void Register(
 133        Func<IReadOnlyList<Type>> functionTypes,
 134        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> groupTypes,
 135        Func<IReadOnlyList<Type>> agentTypes,
 136        Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>> handoffTopology,
 137        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> groupChatGroups,
 138        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? sequentialTopology = null)
 139    {
 11140        ArgumentNullException.ThrowIfNull(functionTypes);
 11141        ArgumentNullException.ThrowIfNull(groupTypes);
 11142        ArgumentNullException.ThrowIfNull(agentTypes);
 11143        ArgumentNullException.ThrowIfNull(handoffTopology);
 11144        ArgumentNullException.ThrowIfNull(groupChatGroups);
 11145        sequentialTopology ??= static () => new Dictionary<string, IReadOnlyList<Type>>();
 146
 11147        lock (_gate)
 148        {
 11149            _registrations.Add(new Registration(functionTypes, groupTypes, agentTypes, handoffTopology, groupChatGroups,
 11150            _cachedCombined = null;
 11151        }
 11152    }
 153
 154    /// <summary>
 155    /// Gets the combined function type provider from all registered assemblies.
 156    /// </summary>
 157    public static bool TryGetFunctionTypes([NotNullWhen(true)] out Func<IReadOnlyList<Type>>? provider)
 158    {
 154159        var local = _asyncLocalOverride.Value;
 154160        if (local is not null)
 161        {
 0162            provider = local.FunctionTypes;
 0163            return true;
 164        }
 165
 154166        lock (_gate)
 167        {
 154168            if (_registrations.Count == 0)
 169            {
 0170                provider = null;
 0171                return false;
 172            }
 173
 154174            EnsureCombined();
 154175            provider = _cachedCombined!.Value.Functions;
 154176            return true;
 177        }
 154178    }
 179
 180    /// <summary>
 181    /// Gets the combined function group provider from all registered assemblies.
 182    /// </summary>
 183    public static bool TryGetGroupTypes([NotNullWhen(true)] out Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? 
 184    {
 183185        var local = _asyncLocalOverride.Value;
 183186        if (local is not null)
 187        {
 2188            provider = local.GroupTypes;
 2189            return true;
 190        }
 191
 181192        lock (_gate)
 193        {
 181194            if (_registrations.Count == 0)
 195            {
 0196                provider = null;
 0197                return false;
 198            }
 199
 181200            EnsureCombined();
 181201            provider = _cachedCombined!.Value.Groups;
 181202            return true;
 203        }
 181204    }
 205
 206    /// <summary>
 207    /// Gets the combined agent type provider from all registered assemblies.
 208    /// </summary>
 209    public static bool TryGetAgentTypes([NotNullWhen(true)] out Func<IReadOnlyList<Type>>? provider)
 210    {
 101211        var local = _asyncLocalOverride.Value;
 101212        if (local is not null)
 213        {
 2214            provider = local.AgentTypes;
 2215            return true;
 216        }
 217
 99218        lock (_gate)
 219        {
 99220            if (_registrations.Count == 0)
 221            {
 0222                provider = null;
 0223                return false;
 224            }
 225
 99226            EnsureCombined();
 99227            provider = _cachedCombined!.Value.Agents;
 99228            return true;
 229        }
 99230    }
 231
 232    /// <summary>
 233    /// Gets the combined handoff topology provider from all registered assemblies.
 234    /// </summary>
 235    public static bool TryGetHandoffTopology(
 236        [NotNullWhen(true)] out Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>>
 237    {
 9238        var local = _asyncLocalOverride.Value;
 9239        if (local is not null)
 240        {
 3241            provider = local.HandoffTopology;
 3242            return true;
 243        }
 244
 6245        lock (_gate)
 246        {
 6247            if (_registrations.Count == 0)
 248            {
 0249                provider = null;
 0250                return false;
 251            }
 252
 6253            EnsureCombined();
 6254            provider = _cachedCombined!.Value.HandoffTopology;
 6255            return true;
 256        }
 6257    }
 258
 259    /// <summary>
 260    /// Gets the combined group chat groups provider from all registered assemblies.
 261    /// </summary>
 262    public static bool TryGetGroupChatGroups(
 263        [NotNullWhen(true)] out Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? provider)
 264    {
 16265        var local = _asyncLocalOverride.Value;
 16266        if (local is not null)
 267        {
 3268            provider = local.GroupChatGroups;
 3269            return true;
 270        }
 271
 13272        lock (_gate)
 273        {
 13274            if (_registrations.Count == 0)
 275            {
 0276                provider = null;
 0277                return false;
 278            }
 279
 13280            EnsureCombined();
 13281            provider = _cachedCombined!.Value.GroupChatGroups;
 13282            return true;
 283        }
 13284    }
 285
 286    /// <summary>
 287    /// Gets the combined sequential topology provider from all registered assemblies.
 288    /// </summary>
 289    public static bool TryGetSequentialTopology(
 290        [NotNullWhen(true)] out Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? provider)
 291    {
 8292        var local = _asyncLocalOverride.Value;
 8293        if (local is not null)
 294        {
 3295            provider = local.SequentialTopology;
 3296            return true;
 297        }
 298
 5299        lock (_gate)
 300        {
 5301            if (_registrations.Count == 0)
 302            {
 0303                provider = null;
 0304                return false;
 305            }
 306
 5307            EnsureCombined();
 5308            provider = _cachedCombined!.Value.SequentialTopology;
 5309            return true;
 310        }
 5311    }
 312
 313    /// <summary>
 314    /// Creates a test-scoped override that replaces bootstrap discovery for the current async context.
 315    /// Dispose the returned scope to restore the previous state.
 316    /// </summary>
 317    internal static IDisposable BeginTestScope(
 318        Func<IReadOnlyList<Type>> functionTypes,
 319        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> groupTypes,
 320        Func<IReadOnlyList<Type>> agentTypes,
 321        Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>>? handoffTopology = null
 322        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? groupChatGroups = null,
 323        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>>? sequentialTopology = null,
 324        IAIFunctionProvider? aiFunctionProvider = null)
 325    {
 11326        handoffTopology ??= static () => new Dictionary<Type, IReadOnlyList<(Type, string?)>>();
 11327        groupChatGroups ??= static () => new Dictionary<string, IReadOnlyList<Type>>();
 11328        sequentialTopology ??= static () => new Dictionary<string, IReadOnlyList<Type>>();
 11329        var prior = _asyncLocalOverride.Value;
 11330        var priorProvider = _asyncLocalProviderOverride.Value;
 11331        var priorGraphTopology = _asyncLocalGraphTopologyOverride.Value;
 11332        _asyncLocalOverride.Value = new Registration(functionTypes, groupTypes, agentTypes, handoffTopology, groupChatGr
 11333        _asyncLocalProviderOverride.Value = aiFunctionProvider;
 11334        _asyncLocalGraphTopologyOverride.Value = null;
 11335        return new Scope(prior, priorProvider, priorGraphTopology);
 336    }
 337
 338    private static void EnsureCombined()
 339    {
 458340        if (_cachedCombined.HasValue)
 456341            return;
 342
 4343        var functionProviders = _registrations.Select(r => r.FunctionTypes).ToArray();
 4344        var groupProviders = _registrations.Select(r => r.GroupTypes).ToArray();
 4345        var agentProviders = _registrations.Select(r => r.AgentTypes).ToArray();
 4346        var topologyProviders = _registrations.Select(r => r.HandoffTopology).ToArray();
 4347        var groupChatProviders = _registrations.Select(r => r.GroupChatGroups).ToArray();
 4348        var sequentialProviders = _registrations.Select(r => r.SequentialTopology).ToArray();
 349
 2350        Func<IReadOnlyList<Type>> combinedFunctions = () =>
 2351        {
 154352            var result = new List<Type>();
 154353            var seen = new HashSet<Type>();
 616354            foreach (var p in functionProviders)
 308355                foreach (var t in p())
 0356                    if (seen.Add(t))
 0357                        result.Add(t);
 154358            return result;
 2359        };
 360
 2361        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> combinedGroups = () =>
 2362        {
 181363            var merged = new Dictionary<string, List<Type>>();
 724364            foreach (var p in groupProviders)
 362365                foreach (var (key, types) in p())
 2366                {
 0367                    if (!merged.TryGetValue(key, out var list))
 0368                        merged[key] = list = [];
 0369                    foreach (var t in types)
 0370                        if (!list.Contains(t))
 0371                            list.Add(t);
 2372                }
 181373            return merged.ToDictionary(
 0374                kv => kv.Key,
 181375                kv => (IReadOnlyList<Type>)kv.Value.AsReadOnly());
 2376        };
 377
 2378        Func<IReadOnlyList<Type>> combinedAgents = () =>
 2379        {
 99380            var result = new List<Type>();
 99381            var seen = new HashSet<Type>();
 396382            foreach (var p in agentProviders)
 198383                foreach (var t in p())
 0384                    if (seen.Add(t))
 0385                        result.Add(t);
 99386            return result;
 2387        };
 388
 2389        Func<IReadOnlyDictionary<Type, IReadOnlyList<(Type TargetType, string? HandoffReason)>>> combinedTopology = () =
 2390        {
 6391            var merged = new Dictionary<Type, List<(Type, string?)>>();
 24392            foreach (var p in topologyProviders)
 12393                foreach (var (agentType, targets) in p())
 2394                {
 0395                    if (!merged.TryGetValue(agentType, out var list))
 0396                        merged[agentType] = list = [];
 0397                    foreach (var target in targets)
 0398                        if (!list.Contains(target))
 0399                            list.Add(target);
 2400                }
 6401            return merged.ToDictionary(
 0402                kv => kv.Key,
 6403                kv => (IReadOnlyList<(Type, string?)>)kv.Value.AsReadOnly());
 2404        };
 405
 2406        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> combinedGroupChatGroups = () =>
 2407        {
 13408            var merged = new Dictionary<string, List<Type>>();
 52409            foreach (var p in groupChatProviders)
 26410                foreach (var (key, types) in p())
 2411                {
 0412                    if (!merged.TryGetValue(key, out var list))
 0413                        merged[key] = list = [];
 0414                    foreach (var t in types)
 0415                        if (!list.Contains(t))
 0416                            list.Add(t);
 2417                }
 13418            return merged.ToDictionary(
 0419                kv => kv.Key,
 13420                kv => (IReadOnlyList<Type>)kv.Value.AsReadOnly());
 2421        };
 422
 2423        Func<IReadOnlyDictionary<string, IReadOnlyList<Type>>> combinedSequentialTopology = () =>
 2424        {
 5425            var merged = new Dictionary<string, List<Type>>();
 20426            foreach (var p in sequentialProviders)
 10427                foreach (var (key, types) in p())
 2428                {
 0429                    if (!merged.TryGetValue(key, out var list))
 0430                        merged[key] = list = [];
 0431                    foreach (var t in types)
 0432                        if (!list.Contains(t))
 0433                            list.Add(t);
 2434                }
 5435            return merged.ToDictionary(
 0436                kv => kv.Key,
 5437                kv => (IReadOnlyList<Type>)kv.Value.AsReadOnly());
 2438        };
 439
 2440        _cachedCombined = (combinedFunctions, combinedGroups, combinedAgents, combinedTopology, combinedGroupChatGroups,
 2441    }
 442
 443    private static void EnsureCombinedGraphTopology()
 444    {
 0445        if (_cachedCombinedGraphTopology is not null)
 0446            return;
 447
 0448        var providers = _graphTopologyRegistrations.ToArray();
 0449        _cachedCombinedGraphTopology = () =>
 0450        {
 0451            var merged = new Dictionary<string, GraphTopologyRegistration>(StringComparer.Ordinal);
 0452            foreach (var p in providers)
 0453                foreach (var (name, reg) in p())
 0454                    merged[name] = reg;
 0455            return merged;
 0456        };
 0457    }
 458
 459    private sealed class Scope : IDisposable
 460    {
 461        private readonly Registration? _prior;
 462        private readonly IAIFunctionProvider? _priorProvider;
 463        private readonly Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>? _priorGraphTopology;
 464
 11465        public Scope(
 11466            Registration? prior,
 11467            IAIFunctionProvider? priorProvider,
 11468            Func<IReadOnlyDictionary<string, GraphTopologyRegistration>>? priorGraphTopology)
 469        {
 11470            _prior = prior;
 11471            _priorProvider = priorProvider;
 11472            _priorGraphTopology = priorGraphTopology;
 11473        }
 474
 475        public void Dispose()
 476        {
 11477            _asyncLocalOverride.Value = _prior;
 11478            _asyncLocalProviderOverride.Value = _priorProvider;
 11479            _asyncLocalGraphTopologyOverride.Value = _priorGraphTopology;
 11480        }
 481    }
 482}

Methods/Properties

.ctor(System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.Type,System.Collections.Generic.IReadOnlyList`1<System.ValueTuple`2<System.Type,System.String>>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>)
get_FunctionTypes()
get_GroupTypes()
get_AgentTypes()
get_HandoffTopology()
get_GroupChatGroups()
get_SequentialTopology()
.cctor()
RegisterAIFunctionProvider(NexusLabs.Needlr.AgentFramework.IAIFunctionProvider)
TryGetAIFunctionProvider(NexusLabs.Needlr.AgentFramework.IAIFunctionProvider&)
RegisterGraphTopology(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,NexusLabs.Needlr.AgentFramework.GraphTopologyRegistration>>)
TryGetGraphTopology(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,NexusLabs.Needlr.AgentFramework.GraphTopologyRegistration>>&)
Register(System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.Type,System.Collections.Generic.IReadOnlyList`1<System.ValueTuple`2<System.Type,System.String>>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>)
TryGetFunctionTypes(System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>&)
TryGetGroupTypes(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>&)
TryGetAgentTypes(System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>&)
TryGetHandoffTopology(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.Type,System.Collections.Generic.IReadOnlyList`1<System.ValueTuple`2<System.Type,System.String>>>>&)
TryGetGroupChatGroups(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>&)
TryGetSequentialTopology(System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>&)
BeginTestScope(System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyList`1<System.Type>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.Type,System.Collections.Generic.IReadOnlyList`1<System.ValueTuple`2<System.Type,System.String>>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,System.Collections.Generic.IReadOnlyList`1<System.Type>>>,NexusLabs.Needlr.AgentFramework.IAIFunctionProvider)
EnsureCombined()
EnsureCombinedGraphTopology()
.ctor(NexusLabs.Needlr.AgentFramework.AgentFrameworkGeneratedBootstrap/Registration,NexusLabs.Needlr.AgentFramework.IAIFunctionProvider,System.Func`1<System.Collections.Generic.IReadOnlyDictionary`2<System.String,NexusLabs.Needlr.AgentFramework.GraphTopologyRegistration>>)
Dispose()