using StellaOps.Cli.Configuration; using System.CommandLine; namespace StellaOps.Cli.Commands; internal static class ImageCommandGroup { internal static Command BuildImageCommand( IServiceProvider services, StellaOpsCliOptions options, Option verboseOption, CancellationToken cancellationToken) { var image = new Command("image", "OCI image operations"); image.Add(BuildInspectCommand(services, options, verboseOption, cancellationToken)); return image; } private static Command BuildInspectCommand( IServiceProvider services, StellaOpsCliOptions options, Option verboseOption, CancellationToken cancellationToken) { var referenceArg = new Argument("reference") { Description = "Image reference (e.g., nginx:latest, ghcr.io/org/app@sha256:...)" }; var resolveIndexOption = new Option("--resolve-index", new[] { "-r" }) { Description = "Resolve multi-arch index to platform manifests" }; resolveIndexOption.SetDefaultValue(true); var printLayersOption = new Option("--print-layers", new[] { "-l" }) { Description = "Include layer details in output" }; printLayersOption.SetDefaultValue(true); var platformOption = new Option("--platform", new[] { "-p" }) { Description = "Filter to specific platform (e.g., linux/amd64)" }; var outputOption = new Option("--output", new[] { "-o" }) { Description = "Output format: table (default), json" }; outputOption.SetDefaultValue("table"); outputOption.FromAmong("table", "json"); var timeoutOption = new Option("--timeout") { Description = "Request timeout in seconds (default: 60)" }; timeoutOption.SetDefaultValue(60); var inspect = new Command("inspect", "Inspect OCI image manifest and layers") { referenceArg, resolveIndexOption, printLayersOption, platformOption, outputOption, timeoutOption, verboseOption }; inspect.SetAction(async (parseResult, _) => { var reference = parseResult.GetValue(referenceArg) ?? string.Empty; var resolveIndex = parseResult.GetValue(resolveIndexOption); var printLayers = parseResult.GetValue(printLayersOption); var platform = parseResult.GetValue(platformOption); var output = parseResult.GetValue(outputOption) ?? "table"; var timeoutSeconds = parseResult.GetValue(timeoutOption); var verbose = parseResult.GetValue(verboseOption); return await CommandHandlers.HandleInspectImageAsync( services, reference, resolveIndex, printLayers, platform, output, timeoutSeconds, verbose, cancellationToken); }); return inspect; } }