feat(host): флаг --version для сверки установленного бинаря

This commit is contained in:
2026-07-31 02:17:28 +03:00
parent c65a890df9
commit 7c4d7b2c3e
3 changed files with 35 additions and 0 deletions
@@ -0,0 +1,10 @@
namespace Kompas.Mcp.Core.Startup;
/// <summary>Аргументы командной строки хоста, разбираемые до поднятия MCP-сервера.</summary>
public static class CliArguments
{
/// <summary>Запрошена ли печать версии (<c>--version</c> / <c>-v</c>).</summary>
public static bool IsVersionRequest(string[] args)
=> args.Any(a => string.Equals(a, "--version", StringComparison.Ordinal)
|| string.Equals(a, "-v", StringComparison.Ordinal));
}
+9
View File
@@ -6,6 +6,7 @@ using Kompas.Mcp.Core.Drawings;
using Kompas.Mcp.Core.Editing;
using Kompas.Mcp.Core.Modeling;
using Kompas.Mcp.Core.Query;
using Kompas.Mcp.Core.Startup;
using Kompas.Mcp.Core.Threading;
using Kompas.Mcp.Core.Validation;
using Kompas.Mcp.Core.Vision;
@@ -13,6 +14,14 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
// Печать версии — до поднятия хоста: это не MCP-сессия, stdout свободен.
if (CliArguments.IsVersionRequest(args))
{
var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Console.WriteLine(version?.ToString(3) ?? "0.0.0");
return;
}
var builder = Host.CreateApplicationBuilder(args);
// ВАЖНО: stdout занят протоколом MCP (stdio). Все логи — только в stderr.
@@ -0,0 +1,16 @@
using Kompas.Mcp.Core.Startup;
namespace Kompas.Mcp.Tests;
[Trait("Category", "Unit")]
public sealed class CliArgumentsTests
{
[Theory]
[InlineData(new[] { "--version" }, true)]
[InlineData(new[] { "-v" }, true)]
[InlineData(new[] { "--other", "--version" }, true)]
[InlineData(new string[0], false)]
[InlineData(new[] { "--verbose" }, false)]
public void IsVersionRequest_recognizes_only_exact_flags(string[] args, bool expected)
=> Assert.Equal(expected, CliArguments.IsVersionRequest(args));
}