< Summary

Information
Class: NexusLabs.Needlr.AgentFramework.Progress.ProgressReporterFactory
Assembly: NexusLabs.Needlr.AgentFramework
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.AgentFramework/Progress/ProgressReporterFactory.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 54
Line coverage: 100%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%22100%
Create(...)100%22100%
Create(...)75%44100%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.AgentFramework/Progress/ProgressReporterFactory.cs

#LineLine coverage
 1namespace NexusLabs.Needlr.AgentFramework.Progress;
 2
 3/// <summary>
 4/// Default <see cref="IProgressReporterFactory"/> that creates reporters with
 5/// DI-registered default sinks or caller-provided per-orchestration sinks.
 6/// </summary>
 7/// <remarks>
 8/// <para>
 9/// Default sinks are resolved once at factory construction from all
 10/// <see cref="IProgressSink"/> instances registered in DI. This includes
 11/// sinks auto-discovered by Needlr and any added manually via
 12/// <c>services.AddSingleton&lt;IProgressSink, T&gt;()</c>.
 13/// </para>
 14/// <para>
 15/// The per-orchestration overload (<see cref="IProgressReporterFactory.Create(string, IEnumerable{IProgressSink})"/>)
 16/// bypasses defaults entirely, giving callers full control.
 17/// </para>
 18/// </remarks>
 19[DoNotAutoRegister]
 20internal sealed class ProgressReporterFactory : IProgressReporterFactory
 21{
 22    private readonly IReadOnlyList<IProgressSink> _defaultSinks;
 23    private readonly IProgressSequence _sequence;
 24    private readonly IProgressReporterErrorHandler _errorHandler;
 25
 2126    internal ProgressReporterFactory(
 2127        IEnumerable<IProgressSink> defaultSinks,
 2128        IProgressSequence sequence,
 2129        IProgressReporterErrorHandler? errorHandler = null)
 30    {
 2131        _defaultSinks = defaultSinks.ToArray();
 2132        _sequence = sequence;
 2133        _errorHandler = errorHandler ?? new NullProgressReporterErrorHandler();
 2134    }
 35
 36    /// <inheritdoc />
 37    public IProgressReporter Create(string workflowId)
 38    {
 439        if (_defaultSinks.Count == 0)
 240            return NullProgressReporter.Instance;
 41
 242        return new ProgressReporter(workflowId, _defaultSinks, _sequence, _errorHandler);
 43    }
 44
 45    /// <inheritdoc />
 46    public IProgressReporter Create(string workflowId, IEnumerable<IProgressSink> sinks)
 47    {
 1348        var sinkList = sinks as IReadOnlyList<IProgressSink> ?? sinks.ToArray();
 1349        if (sinkList.Count == 0)
 150            return NullProgressReporter.Instance;
 51
 1252        return new ProgressReporter(workflowId, sinkList, _sequence, _errorHandler);
 53    }
 54}