4e3d367637
ci / build (push) Successful in 28s
Инструменты были нарезаны по способу вызова, а не по смыслу: четыре отверстия, двойники *_index, одиннадцать sketch_add_*. Агент платил за это дважды — 40 КБ описаний в каждой сессии и лишние round-trip'ы, а каждый вызов это ещё и шанс сбиться. Теперь инструмент называет ОПЕРАЦИЮ, вариант задаётся параметром, объект выбирается индексом или точкой одним и тем же инструментом. Проверка построения приходит сама. Каждая мутирующая операция дописывает к ответу итог validate_part (AutoValidation): Create()/Update()==true не значит успех, а правило навыка «проверяй после каждого шага» удваивало число вызовов. Выключается через set_auto_validate или KOMPAS_MCP_AUTOVALIDATE=0 — сбой самой проверки уходит в примечание и никогда не превращает удачную операцию в ошибку. Эскиз: 16 инструментов → 3. sketch_create(plane|faceIndex|x,y,z, entities[], autoClose) строит контур целиком; пакет выполняется за ОДИН заход на STA-поток (PartModeler.AddEntitiesAsync), ошибка называет позицию примитива в списке. Слияния: hole(type=simple|counterbore|countersink|conic), extrude/revolve(mode), pattern(kind), mirror (без featureIds — всё тело), document_save(path?), set_variable как upsert (разведочный вызов «есть ли такая» больше не нужен), list_faces/list_edges(index?) вместо отдельных describe_*, get_part_info и get_bounding_box — в describe_model(sections), где незапрошенные разделы вообще не читаются из модели. Селектор index|point: fillet_edge/chamfer_edge принимают edgeIndices списком — одна операция дерева на все рёбра; для операций API7, умеющих только точку, индекс переводится в точку через ModelInspectionService.FaceCenterPointAsync (середина параметрической области грани). Схема слитого инструмента не запрещает неверную комбинацию полей — это делает валидация, и её сообщение называет type и недостающий параметр. Тесты: 291 unit (+41) и 136 integration (+5), интеграционные — на живом КОМПАС. Новые проверяют ровно рискованные места: точка-из-индекса лежит на грани и по ней создаётся эскиз, мульти-ребёрное скругление даёт один узел дерева и убыль объёма, upsert создаёт и затем меняет переменную с формулой, пакет сообщает позицию сбоя. PluginSkillsTests теперь падает, если в публикуемом навыке всплывёт слитое имя.
31 lines
948 B
C#
31 lines
948 B
C#
using Kompas.Mcp.Core.Validation;
|
|
|
|
namespace Kompas.Mcp.Tests;
|
|
|
|
/// <summary>Режим авто-валидации из окружения: по умолчанию включён, выключается явными «нет».</summary>
|
|
[Trait("Category", "Unit")]
|
|
public sealed class AutoValidationSettingsTests
|
|
{
|
|
[Theory]
|
|
[InlineData(null)]
|
|
[InlineData("")]
|
|
[InlineData(" ")]
|
|
[InlineData("1")]
|
|
[InlineData("true")]
|
|
[InlineData("on")]
|
|
[InlineData("что угодно")]
|
|
public void Enabled_by_default(string? value)
|
|
=> Assert.True(AutoValidationSettings.ParseEnabled(value));
|
|
|
|
[Theory]
|
|
[InlineData("0")]
|
|
[InlineData("false")]
|
|
[InlineData("FALSE")]
|
|
[InlineData("Off")]
|
|
[InlineData("no")]
|
|
[InlineData("disabled")]
|
|
[InlineData(" 0 ")]
|
|
public void Disabled_by_explicit_negatives(string value)
|
|
=> Assert.False(AutoValidationSettings.ParseEnabled(value));
|
|
}
|