feat(host): флаг --version для сверки установленного бинаря
This commit is contained in:
@@ -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));
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
Reference in New Issue
Block a user