using Sdt.Config; using Sdt.Runner; namespace Sdt.Core; public sealed record ProbeResult( string Tool, bool IsAvailable, string? Version = null, string? Details = null); public sealed record InstallCommand( string Command, IReadOnlyList Args); public sealed record InstallPlan( string Tool, bool Supported, string Summary, IReadOnlyList Commands); public sealed record WorkflowStepResult( string WorkflowId, string StepId, string StepLabel, RunResult Result); public enum ExecutionStopReason { MissingPrereq, InstallFailed, CommandFailed, ValidationFailed, UserDeclined, } public sealed record WorkflowExecutionResult( bool Success, ExecutionStopReason? StopReason, string Message, IReadOnlyList Steps); public interface IToolProbe { Task ProbeAsync( string tool, string projectRoot, DevToolConfig? config = null, CancellationToken cancellationToken = default); } public interface IPrereqInstaller { Task GetInstallPlanAsync( string tool, string projectRoot, DevToolConfig? config = null, CancellationToken cancellationToken = default); Task RunInstallAsync( InstallCommand command, string projectRoot, Action onOutput, CancellationToken cancellationToken = default); } public interface IActionRunner { Task RunStepAsync( WorkflowStep step, string projectRoot, Action onOutput, CancellationToken cancellationToken = default); } public interface IWorkflowPlanner { List ResolvePlan( WorkflowDefinition workflow, IReadOnlyDictionary allWorkflows); } public interface IRequirementResolver { List Resolve(WorkflowStep step); List Resolve(BuildTarget target); }