Files
git.stella-ops.org/src/Scanner/__Libraries/StellaOps.Scanner.EntryTrace/ServiceCollectionExtensions.cs
StellaOps Bot f1a39c4ce3
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Notify Smoke Test / Notify Unit Tests (push) Has been cancelled
Notify Smoke Test / Notifier Service Tests (push) Has been cancelled
Notify Smoke Test / Notification Smoke Test (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Manifest Integrity / Validate Schema Integrity (push) Has been cancelled
Manifest Integrity / Validate Contract Documents (push) Has been cancelled
Manifest Integrity / Validate Pack Fixtures (push) Has been cancelled
Manifest Integrity / Audit SHA256SUMS Files (push) Has been cancelled
Manifest Integrity / Verify Merkle Roots (push) Has been cancelled
devportal-offline / build-offline (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
up
2025-12-13 18:08:55 +02:00

115 lines
4.6 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using StellaOps.Scanner.EntryTrace.Diagnostics;
using StellaOps.Scanner.EntryTrace.Runtime;
using StellaOps.Scanner.EntryTrace.Semantic;
using StellaOps.Scanner.EntryTrace.Semantic.Adapters;
using StellaOps.Scanner.EntryTrace.Semantic.Analysis;
namespace StellaOps.Scanner.EntryTrace;
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddEntryTraceAnalyzer(this IServiceCollection services, Action<EntryTraceAnalyzerOptions>? configure = null)
{
if (services is null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddOptions<EntryTraceAnalyzerOptions>()
.BindConfiguration(EntryTraceAnalyzerOptions.SectionName);
if (configure is not null)
{
services.Configure(configure);
}
services.TryAddSingleton<EntryTraceMetrics>();
services.TryAddSingleton<IEntryTraceAnalyzer, EntryTraceAnalyzer>();
services.TryAddSingleton<EntryTraceRuntimeReconciler>();
services.TryAddSingleton<IEntryTraceResultStore, NullEntryTraceResultStore>();
return services;
}
/// <summary>
/// Adds entry trace analyzer with integrated semantic analysis.
/// </summary>
/// <remarks>
/// Part of Sprint 0411 - Semantic Entrypoint Engine (Task 17).
/// </remarks>
public static IServiceCollection AddSemanticEntryTraceAnalyzer(
this IServiceCollection services,
Action<EntryTraceAnalyzerOptions>? configure = null,
Action<SemanticAnalysisOptions>? configureSemantic = null)
{
if (services is null)
{
throw new ArgumentNullException(nameof(services));
}
// Add base entry trace analyzer
services.AddEntryTraceAnalyzer(configure);
// Add semantic analysis options
services.AddOptions<SemanticAnalysisOptions>()
.BindConfiguration(SemanticAnalysisOptions.SectionName);
if (configureSemantic is not null)
{
services.Configure(configureSemantic);
}
// Register semantic analysis components
services.TryAddSingleton<CapabilityDetector>();
services.TryAddSingleton<ThreatVectorInferrer>();
services.TryAddSingleton<DataBoundaryMapper>();
// Register language adapters
services.TryAddEnumerable(ServiceDescriptor.Singleton<ISemanticEntrypointAnalyzer, PythonSemanticAdapter>());
services.TryAddEnumerable(ServiceDescriptor.Singleton<ISemanticEntrypointAnalyzer, JavaSemanticAdapter>());
services.TryAddEnumerable(ServiceDescriptor.Singleton<ISemanticEntrypointAnalyzer, NodeSemanticAdapter>());
services.TryAddEnumerable(ServiceDescriptor.Singleton<ISemanticEntrypointAnalyzer, DotNetSemanticAdapter>());
services.TryAddEnumerable(ServiceDescriptor.Singleton<ISemanticEntrypointAnalyzer, GoSemanticAdapter>());
// Register orchestrator
services.TryAddSingleton<SemanticEntrypointOrchestrator>(sp =>
{
var adapters = sp.GetServices<ISemanticEntrypointAnalyzer>().ToList();
var capabilityDetector = sp.GetRequiredService<CapabilityDetector>();
var threatInferrer = sp.GetRequiredService<ThreatVectorInferrer>();
var boundaryMapper = sp.GetRequiredService<DataBoundaryMapper>();
return new SemanticEntrypointOrchestrator(adapters, capabilityDetector, threatInferrer, boundaryMapper);
});
// Register semantic entry trace analyzer
services.TryAddSingleton<ISemanticEntryTraceAnalyzer, SemanticEntryTraceAnalyzer>();
return services;
}
}
/// <summary>
/// Options for semantic analysis behavior.
/// </summary>
public sealed class SemanticAnalysisOptions
{
public const string SectionName = "Scanner:EntryTrace:Semantic";
/// <summary>Whether semantic analysis is enabled.</summary>
public bool Enabled { get; set; } = true;
/// <summary>Minimum confidence threshold for threat vectors (0.0-1.0).</summary>
public double ThreatConfidenceThreshold { get; set; } = 0.3;
/// <summary>Maximum number of threat vectors to emit per entrypoint.</summary>
public int MaxThreatVectors { get; set; } = 50;
/// <summary>Whether to include low-confidence capabilities.</summary>
public bool IncludeLowConfidenceCapabilities { get; set; } = false;
/// <summary>Languages to include in semantic analysis (empty = all).</summary>
public IReadOnlyList<string> EnabledLanguages { get; set; } = Array.Empty<string>();
}