diff --git a/docs/AGENT_CAD_TOOL_CATALOG.md b/docs/AGENT_CAD_TOOL_CATALOG.md index 48588d7..97ae55f 100644 --- a/docs/AGENT_CAD_TOOL_CATALOG.md +++ b/docs/AGENT_CAD_TOOL_CATALOG.md @@ -2,7 +2,7 @@ ## Назначение и критерий полноты -Этот документ задаёт целевой внешний контракт управления CAD-системой и одновременно фиксирует фактическое покрытие сервера. Инвентаризация выполнена по публично зарегистрированным инструментам Host: на момент проверки найдено 84 уникальных реализованных имени. +Этот документ разделяет два слоя: **текущий контракт** из 84 публично зарегистрированных инструментов Host и **целевые расширения**, необходимые автономному агенту. Для существующего метода статус оценивает только поведение, прямо заявленное в его строке: отсутствие соседних `list/update/delete` или явного выбора документа не понижает полностью выполненный метод до частичного. Такие системные разрывы вынесены в отдельные целевые строки. Контракт считается полным не по числу методов, а когда агент может замкнуть цикл: обнаружить состояние, выбрать адресуемые объекты, изменить модель, проверить результат и сохранить его либо безопасно откатить. Для мутирующих семейств проверяется симметрия `list/describe → create → update/transform → delete → validate`. @@ -37,12 +37,12 @@ | `kompas_connect` | Подключить CAD-сессию и вернуть сведения о среде | ✅ реализован | Core | — | — | | `kompas_status` | Получить состояние подключения | ✅ реализован | Core | — | — | | `kompas_set_visible` | Показать или скрыть пользовательское окно | ✅ реализован | Optional | — | — | -| `document_create` | Создать документ заданного типа | 🟡 частично | Core | P0 | Делает документ активным, но не возвращает стабильный `document_id` | -| `document_open` | Открыть документ с диска | 🟡 частично | Core | P0 | Нет стабильного `document_id` и режима открытия без смены активного документа | -| `document_save_as` | Сохранить активный документ по новому пути | 🟡 частично | Core | P0 | Нельзя явно указать документ | -| `document_save` | Сохранить активный документ | 🟡 частично | Core | P0 | Нельзя явно указать документ | -| `document_close` | Закрыть активный документ | 🟡 частично | Core | P0 | Нельзя закрыть документ по идентификатору и проверить несохранённое состояние до действия | -| `document_active` | Описать активный документ | 🟡 частично | Core | P0 | Не даёт инвентарь открытых документов и стабильный идентификатор | +| `document_create` | Создать документ заданного типа и сделать его активным | ✅ реализован | Core | — | — | +| `document_open` | Открыть документ с диска и сделать его активным | ✅ реализован | Core | — | — | +| `document_save_as` | Сохранить активный документ по новому пути | ✅ реализован | Core | — | — | +| `document_save` | Сохранить активный документ | ✅ реализован | Core | — | — | +| `document_close` | Закрыть активный документ с выбранным режимом сохранения | ✅ реализован | Core | — | — | +| `document_active` | Описать активный документ | ✅ реализован | Core | — | — | | `list_documents` | Перечислить открытые документы с типом, путём, состоянием изменений и `document_id` | ⬜ не реализован | Core | P0 | Требуется основа multi-document контура | | `document_activate` | Сделать документ активным по `document_id` | ⬜ не реализован | Core | P0 | Без него невозможно надёжно переключать контекст | | `document_describe` | Прочитать свойства и состояние указанного документа без его активации | ⬜ не реализован | Core | P0 | Нужна документная инспекция вне глобального active state | @@ -52,22 +52,22 @@ | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `sketch_create` | Создать эскиз на базовой плоскости | 🟡 частично | Core | P0 | Идентификатор живёт в сессии и не восстанавливается из документа | -| `sketch_create_on_face` | Создать эскиз на плоской грани, выбранной точкой | 🟡 частично | Advanced | P0 | Выбор по точке неоднозначен и не защищён ревизией модели | -| `sketch_create_on_offset_plane` | Создать эскиз на смещённой плоскости | 🟡 частично | Advanced | P0 | Нет последующего чтения и изменения опорной плоскости | -| `sketch_add_circle` | Добавить окружность | 🟡 частично | Core | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_line` | Добавить отрезок | 🟡 частично | Core | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_create_on_face_index` | Создать эскиз на грани по текущему индексу | 🟡 частично | Core | P0 | Индекс устаревает после изменения геометрии | -| `sketch_add_axis` | Добавить осевую линию | 🟡 частично | Core | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_rectangle` | Добавить прямоугольник | 🟡 частично | Core | P0 | Созданные сегменты нельзя перечислить и изменить | -| `sketch_close` | Завершить редактирование текущего эскиза | 🟡 частично | Core | P0 | Зависит от неявно открытого эскиза и не принимает его идентификатор | -| `sketch_add_arc_3points` | Добавить дугу по трём точкам | 🟡 частично | Advanced | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_arc` | Добавить дугу по центру, радиусу и углам | 🟡 частично | Advanced | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_ellipse` | Добавить эллипс | 🟡 частично | Advanced | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_polyline` | Добавить цепочку отрезков | 🟡 частично | Core | P0 | Не возвращает идентификаторы отдельных сегментов | -| `sketch_add_polygon` | Добавить правильный многоугольник | 🟡 частично | Advanced | P0 | Не возвращает идентификаторы отдельных сегментов | -| `sketch_add_spline` | Добавить сплайн | 🟡 частично | Advanced | P0 | Не возвращает адресуемый `entity_id` | -| `sketch_add_point` | Добавить опорную точку | 🟡 частично | Advanced | P0 | Не возвращает адресуемый `entity_id` | +| `sketch_create` | Создать эскиз на базовой плоскости и вернуть сессионный идентификатор | ✅ реализован | Core | — | — | +| `sketch_create_on_face` | Создать эскиз на плоской грани, выбранной точкой | ✅ реализован | Advanced | — | — | +| `sketch_create_on_offset_plane` | Создать эскиз на смещённой плоскости | ✅ реализован | Advanced | — | — | +| `sketch_add_circle` | Добавить окружность в открытый эскиз | ✅ реализован | Core | — | — | +| `sketch_add_line` | Добавить отрезок в открытый эскиз | ✅ реализован | Core | — | — | +| `sketch_create_on_face_index` | Создать эскиз на грани по текущему индексу | ✅ реализован | Core | — | — | +| `sketch_add_axis` | Добавить осевую линию в открытый эскиз | ✅ реализован | Core | — | — | +| `sketch_add_rectangle` | Добавить прямоугольник в открытый эскиз | ✅ реализован | Core | — | — | +| `sketch_close` | Завершить редактирование текущего открытого эскиза | ✅ реализован | Core | — | — | +| `sketch_add_arc_3points` | Добавить дугу по трём точкам | ✅ реализован | Advanced | — | — | +| `sketch_add_arc` | Добавить дугу по центру, радиусу и углам | ✅ реализован | Advanced | — | — | +| `sketch_add_ellipse` | Добавить эллипс | ✅ реализован | Advanced | — | — | +| `sketch_add_polyline` | Добавить цепочку отрезков | ✅ реализован | Core | — | — | +| `sketch_add_polygon` | Добавить правильный многоугольник | ✅ реализован | Advanced | — | — | +| `sketch_add_spline` | Добавить сплайн | ✅ реализован | Advanced | — | — | +| `sketch_add_point` | Добавить опорную точку | ✅ реализован | Advanced | — | — | | `list_sketches` | Перечислить эскизы документа со стабильными идентификаторами и состоянием | ⬜ не реализован | Core | P0 | Нельзя восстановить контекст после открытия документа | | `describe_sketch` | Прочитать плоскость, состояние и геометрическую сводку эскиза | ⬜ не реализован | Core | P0 | Нет проверки исходного или созданного эскиза | | `list_sketch_entities` | Перечислить сущности эскиза с типом, геометрией и `entity_id` | ⬜ не реализован | Core | P0 | Созданные объекты не адресуются | @@ -87,26 +87,26 @@ | `extrude_cut` | Удалить материал выдавливанием эскиза | ✅ реализован | Core | — | — | | `revolve_boss` | Добавить материал вращением профиля | ✅ реализован | Advanced | — | — | | `revolve_cut` | Удалить материал вращением профиля | ✅ реализован | Advanced | — | — | -| `fillet_edge` | Скруглить ребро, выбранное точкой | 🟡 частично | Advanced | P1 | Выбор по точке неоднозначен, одна операция работает с одним ребром | -| `chamfer_edge` | Снять фаску с ребра, выбранного точкой | 🟡 частично | Advanced | P1 | Выбор по точке неоднозначен, одна операция работает с одним ребром | -| `fillet_edge_index` | Скруглить ребро по текущему индексу | 🟡 частично | Advanced | P0 | Индекс не связан с ревизией и устаревает после изменения | -| `chamfer_edge_index` | Снять фаску с ребра по текущему индексу | 🟡 частично | Advanced | P0 | Индекс не связан с ревизией и устаревает после изменения | -| `shell` | Создать оболочку с удалением выбранных граней | 🟡 частично | Advanced | P0 | Выбор граней основан на нестабильных индексах | +| `fillet_edge` | Скруглить одно ребро, выбранное точкой | ✅ реализован | Advanced | — | — | +| `chamfer_edge` | Снять фаску с одного ребра, выбранного точкой | ✅ реализован | Advanced | — | — | +| `fillet_edge_index` | Скруглить одно ребро по текущему индексу | ✅ реализован | Advanced | — | — | +| `chamfer_edge_index` | Снять фаску с одного ребра по текущему индексу | ✅ реализован | Advanced | — | — | +| `shell` | Создать оболочку с удалением граней по текущим индексам | ✅ реализован | Advanced | — | — | | `rib` | Создать ребро жёсткости по эскизу | ✅ реализован | Advanced | — | — | | `sweep` | Построить тело перемещением профиля по траектории | ✅ реализован | Advanced | — | — | | `loft` | Построить тело по сечениям | ✅ реализован | Advanced | — | — | | `linear_pattern` | Создать линейный массив операций | ✅ реализован | Advanced | — | — | | `circular_pattern` | Создать круговой массив операций | ✅ реализован | Advanced | — | — | | `mirror_operation` | Создать зеркальную копию операций | ✅ реализован | Advanced | — | — | -| `mirror_body` | Зеркально скопировать тела | 🟡 частично | Advanced | P1 | Действует сразу на все тела; нельзя выбрать набор тел и режим замены/копии | -| `hole` | Создать простое отверстие | 🟡 частично | Core | P0 | Не возвращает идентификатор операции для последующего изменения или удаления | -| `draft` | Создать уклон выбранных граней | 🟡 частично | Advanced | P0 | Выбор граней основан на нестабильных индексах | -| `hole_counterbore` | Создать отверстие с цилиндрическим углублением | 🟡 частично | Advanced | P0 | Не возвращает идентификатор операции | -| `hole_countersink` | Создать отверстие с коническим углублением | 🟡 частично | Advanced | P0 | Не возвращает идентификатор операции | -| `hole_conic` | Создать коническое отверстие | 🟡 частично | Advanced | P0 | Не возвращает идентификатор операции | -| `rebuild` | Перестроить активную модель | 🟡 частично | Core | P0 | Нельзя указать документ и получить единую ревизию результата | +| `mirror_body` | Зеркально скопировать все тела относительно базовой плоскости | ✅ реализован | Advanced | — | — | +| `hole` | Создать простое отверстие | ✅ реализован | Core | — | — | +| `draft` | Создать уклон граней по текущим индексам | ✅ реализован | Advanced | — | — | +| `hole_counterbore` | Создать отверстие с цилиндрическим углублением | ✅ реализован | Advanced | — | — | +| `hole_countersink` | Создать отверстие с коническим углублением | ✅ реализован | Advanced | — | — | +| `hole_conic` | Создать коническое отверстие | ✅ реализован | Advanced | — | — | +| `rebuild` | Перестроить активную модель | ✅ реализован | Core | — | — | | `create_variable` | Создать переменную модели | ✅ реализован | Advanced | — | — | -| `set_variable` | Изменить выражение переменной и перестроить модель | 🟡 частично | Advanced | P0 | Для создаваемых сервером эскизов изменение значения не управляет геометрией | +| `set_variable` | Изменить выражение переменной и перестроить модель | ✅ реализован | Advanced | — | — | | `set_variable_note` | Изменить комментарий переменной | ✅ реализован | Optional | — | — | | `delete_variable` | Удалить переменную с проверкой зависимостей | ✅ реализован | Advanced | — | — | | `describe_feature` | Прочитать тип, параметры, состояние и зависимости операции по `feature_id` | ⬜ не реализован | Core | P0 | Текущая инспекция не даёт полного адресного контракта | @@ -118,31 +118,30 @@ | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `move_face` | Смещать грань вдоль нормали | 🟡 частично | Core | P0 | Только выбор по точке; нет селектора с ревизией и идентификатора созданной операции | -| `split_solid_by_plane` | Рассечь тело плоскостью | 🟡 частично | Advanced | P0 | Нельзя выбрать исходное тело устойчивым идентификатором | -| `move_body` | Переместить тело на вектор | 🟡 частично | Advanced | P0 | Использует нестабильный индекс, нет поворота и общей матрицы placement | -| `boolean_union` | Объединить тела | 🟡 частично | Advanced | P1 | Всегда объединяет все тела; нет выбора операндов и идентификатора результата | +| `move_face` | Сместить грань, выбранную точкой, вдоль нормали | ✅ реализован | Core | — | — | +| `split_solid_by_plane` | Рассечь тела активной детали базовой смещённой плоскостью | ✅ реализован | Advanced | — | — | +| `move_body` | Задать перенос и ориентацию выбранного тела | 🟡 частично | Advanced | P1 | Сейчас доступен только перенос тела по текущему индексу; поворот и явная ориентация отсутствуют | +| `boolean_union` | Объединить все тела активной детали | ✅ реализован | Advanced | — | — | | `copy_body` | Копировать выбранное тело с преобразованием | ⬜ не реализован | Advanced | P1 | Нет симметричной операции к перемещению и удалению | | `delete_body` | Удалить выбранное тело | ⬜ не реализован | Core | P0 | Нет полного жизненного цикла многотельной модели | | `boolean_subtract` | Вычесть выбранные тела-инструменты из целевого тела | ⬜ не реализован | Advanced | P1 | Отсутствует типовая булева операция | | `boolean_intersect` | Оставить пересечение выбранных тел | ⬜ не реализован | Advanced | P1 | Отсутствует типовая булева операция | -| `transform_body` | Задать перенос и поворот тела по устойчивому идентификатору | ⬜ не реализован | Advanced | P1 | Текущий перенос покрывает только вектор и индекс | ### Инспекция, выбор объектов и измерения | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `describe_model` | Получить структурный паспорт активной модели | 🟡 частично | Core | P0 | Нет `document_id`, ревизии и полного адресного списка объектов | -| `list_features` | Перечислить дерево операций и основные параметры | 🟡 частично | Core | P0 | Не все созданные операции имеют стабильные `feature_id`; нет зависимостей и состояния исключения | -| `list_bodies` | Перечислить тела | 🟡 частично | Core | P0 | Возвращает индексы без ревизии вместо устойчивых идентификаторов | +| `describe_model` | Получить структурный паспорт активной модели | ✅ реализован | Core | — | — | +| `list_features` | Перечислить дерево операций и доступные основные параметры | ✅ реализован | Core | — | — | +| `list_bodies` | Перечислить тела по текущим индексам | ✅ реализован | Core | — | — | | `list_variables` | Перечислить переменные и вычисленные значения | ✅ реализован | Advanced | — | — | -| `describe_face` | Описать грань по текущему индексу | 🟡 частично | Core | P0 | Индекс не защищён от изменения топологии | -| `describe_edge` | Описать ребро по текущему индексу | 🟡 частично | Core | P0 | Индекс не защищён от изменения топологии | -| `measure` | Измерить расстояние и угол между гранями, рёбрами или вершинами | 🟡 частично | Core | P0 | Принимает `vertex`, но `list_vertices` отсутствует; все индексы без ревизии | +| `describe_face` | Описать грань по текущему индексу | ✅ реализован | Core | — | — | +| `describe_edge` | Описать ребро по текущему индексу | ✅ реализован | Core | — | — | +| `measure` | Измерить расстояние и угол между объектами по переданным индексам, включая вершины | ✅ реализован | Core | — | — | | `get_part_info` | Получить объём, массу, площадь и центр масс | ✅ реализован | Core | — | — | -| `list_components` | Перечислить компоненты верхнего уровня сборки | 🟡 частично | Core | P0 | Недостаточен для управления: нет рекурсии, устойчивых идентификаторов, placement и состояния сопряжений | -| `list_faces` | Перечислить грани и их типы | 🟡 частично | Core | P0 | Индексы действуют только до следующего изменения геометрии | -| `list_edges` | Перечислить рёбра и их типы | 🟡 частично | Core | P0 | Индексы действуют только до следующего изменения геометрии | +| `list_components` | Перечислить компоненты верхнего уровня сборки | ✅ реализован | Core | — | — | +| `list_faces` | Перечислить грани и их типы по текущим индексам | ✅ реализован | Core | — | — | +| `list_edges` | Перечислить рёбра и их типы по текущим индексам | ✅ реализован | Core | — | — | | `get_bounding_box` | Получить габарит модели | ✅ реализован | Core | — | — | | `model_snapshot` | Получить растровый снимок модели | ✅ реализован | Optional | — | — | | `validate_part` | Найти ошибки и необходимость перестроения детали или сборки | ✅ реализован | Core | — | — | @@ -155,8 +154,8 @@ | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `assembly_add_component` | Вставить деталь или подсборку и задать исходное положение | 🟡 частично | Core | P0 | Возвращает индекс и имя, но не устойчивый `component_id` | -| `assembly_add_mate` | Создать сопряжение между гранями компонентов | 🟡 частично | Core | P0 | Только coincidence/distance, выбор по точкам, нет `mate_id` | +| `assembly_add_component` | Вставить деталь или подсборку и задать исходное положение | ✅ реализован | Core | — | — | +| `assembly_add_mate` | Создать адресуемое сопряжение поддерживаемого типа между компонентами | 🟡 частично | Core | P0 | Сейчас доступны только coincidence/distance, выбор по точкам и результат без `mate_id`; нужны также concentric, parallel, perpendicular, angle и tangency | | `describe_assembly` | Рекурсивно описать дерево компонентов, документы, состояния и placement | ⬜ не реализован | Core | P0 | Верхнеуровневого списка недостаточно для управления | | `describe_component` | Прочитать компонент, его placement, подавление и ссылки | ⬜ не реализован | Core | P0 | Нет адресной инспекции компонента | | `assembly_set_component_placement` | Изменить перенос и поворот компонента по `component_id` | ⬜ не реализован | Core | P0 | Нет управления placement после вставки | @@ -165,8 +164,6 @@ | `list_mates` | Перечислить сопряжения, объекты, параметры и состояние решения | ⬜ не реализован | Core | P0 | Созданные сопряжения не адресуются | | `assembly_update_mate` | Изменить тип, объекты или параметр сопряжения | ⬜ не реализован | Core | P0 | Нет исправления сопряжения без пересоздания | | `assembly_remove_mate` | Удалить сопряжение по `mate_id` | ⬜ не реализован | Core | P0 | Нет симметрии add/remove | -| `assembly_add_concentric_mate` | Создать соосное сопряжение цилиндрических объектов | ⬜ не реализован | Core | P1 | Критично для валов, отверстий и крепежа | -| `assembly_add_oriented_mate` | Создать parallel, perpendicular, angle или tangency сопряжение | ⬜ не реализован | Advanced | P1 | Требуется расширение типовых связей и отдельная проверка вариантов | | `assembly_check_interference` | Найти пересечения компонентов и оценить объём коллизий | ⬜ не реализован | Core | P0 | Нет проверки физической корректности сборки | | `validate_assembly` | Проверить нерешённые, конфликтующие и избыточные сопряжения | ⬜ не реализован | Core | P0 | Текущая общая проверка не даёт сборочный диагноз | @@ -174,17 +171,17 @@ | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `drawing_create_standard_views` | Создать набор основных ассоциативных видов | 🟡 частично | Core | P0 | Возвращает номера, но нет стабильных `view_id`, инвентаризации и удаления | -| `drawing_fill_title_block` | Заполнить основные поля штампа | 🟡 частично | Core | P1 | Поддерживает только три поля и не читает текущее содержимое | -| `drawing_add_linear_dimension` | Создать линейный размер | 🟡 частично | Core | P0 | Нет идентификатора, чтения, изменения, удаления и надёжной ассоциативной привязки | -| `drawing_add_diametral_dimension` | Создать диаметральный размер | 🟡 частично | Core | P0 | Ассоциация только с окружностью; нет адресного жизненного цикла и привязки к дуге | -| `drawing_add_radial_dimension` | Создать радиальный размер | 🟡 частично | Core | P0 | Ассоциация только с окружностью; нет адресного жизненного цикла и привязки к дуге | -| `drawing_add_angular_dimension` | Создать угловой размер | 🟡 частично | Core | P0 | Свободное размещение без ассоциации с двумя линиями и без `annotation_id` | -| `drawing_add_rough` | Создать обозначение шероховатости | 🟡 частично | Advanced | P1 | Нет ассоциации с геометрией и `annotation_id` | -| `drawing_add_text` | Создать текстовую надпись | 🟡 частично | Core | P0 | Нет `annotation_id`, чтения, изменения и удаления | +| `drawing_create_standard_views` | Создать набор основных ассоциативных видов и вернуть их номера | ✅ реализован | Core | — | — | +| `drawing_fill_title_block` | Заполнить обозначение, наименование и материал в штампе | ✅ реализован | Core | — | — | +| `drawing_add_linear_dimension` | Создать свободный линейный размер | ✅ реализован | Core | — | — | +| `drawing_add_diametral_dimension` | Создать свободный или связанный с окружностью диаметральный размер | ✅ реализован | Core | — | — | +| `drawing_add_radial_dimension` | Создать свободный или связанный с окружностью радиальный размер | ✅ реализован | Core | — | — | +| `drawing_add_angular_dimension` | Создать свободный угловой размер | ✅ реализован | Core | — | — | +| `drawing_add_rough` | Создать свободное обозначение шероховатости | ✅ реализован | Advanced | — | — | +| `drawing_add_text` | Создать текстовую надпись | ✅ реализован | Core | — | — | | `drawing_set_technical_requirements` | Заменить блок технических требований | ✅ реализован | Advanced | — | — | -| `drawing_set_sheet_format` | Задать формат и ориентацию листа | 🟡 частично | Core | P1 | Можно изменить известный номер, но нельзя перечислить, добавить или удалить листы | -| `drawing_add_leader` | Создать выноску с одной ветвью и текстом | 🟡 частично | Advanced | P1 | Нет `annotation_id`, ассоциации, нескольких ветвей и специальных вариантов | +| `drawing_set_sheet_format` | Задать формат и ориентацию листа по номеру | ✅ реализован | Core | — | — | +| `drawing_add_leader` | Создать свободную выноску с одной ветвью и текстом | ✅ реализован | Advanced | — | — | | `drawing_list_sheets` | Перечислить листы, форматы, стили и состояния | ⬜ не реализован | Core | P0 | Нет основы многолистного управления | | `drawing_add_sheet` | Добавить лист с форматом и стилем | ⬜ не реализован | Advanced | P1 | Многолистный комплект не создаётся | | `drawing_delete_sheet` | Удалить лист по `sheet_id` | ⬜ не реализован | Advanced | P1 | Нет полного жизненного цикла листа | @@ -208,25 +205,26 @@ | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `import_step` | Импортировать STEP как новую деталь или сборку | 🟡 частично | Core | P0 | Новый документ не получает стабильный `document_id`; параметры импорта ограничены | -| `export_step` | Экспортировать активную 3D-модель в STEP | 🟡 частично | Core | P0 | Нельзя указать документ и выбрать отдельные тела или компоненты | +| `import_step` | Импортировать STEP как новую активную деталь или сборку | ✅ реализован | Core | — | — | +| `export_step` | Экспортировать активную 3D-модель в STEP | ✅ реализован | Core | — | — | | `import_model` | Импортировать распространённый нейтральный или собственный 3D-формат по явному `format` | ⬜ не реализован | Advanced | P2 | Дополнительные поддерживаемые форматы требуют поформатной проверки | | `export_model` | Экспортировать документ или выбранные тела в распространённый 3D-формат | ⬜ не реализован | Advanced | P2 | Нужна матрица форматов и проверяемый отчёт преобразования | | `import_drawing` | Импортировать 2D-обменный формат в новый документ | ⬜ не реализован | Advanced | P2 | Нужна поформатная проверка слоёв, масштаба и единиц | -| `export_drawing` | Экспортировать выбранные листы в 2D-обменный, растровый или печатный формат | ⬜ не реализован | Advanced | P1 | Нет внешнего выпуска комплекта чертежей | +| `export_drawing` | Экспортировать выбранные листы в единый PDF-документ | ⬜ не реализован | Advanced | P1 | Нет выпуска комплекта чертежей для просмотра и печати | +| `export_drawing_exchange` | Экспортировать геометрию выбранного листа в редактируемый 2D-обменный формат | ⬜ не реализован | Advanced | P2 | Нужна отдельная поформатная проверка слоёв, масштаба, шрифтов и единиц | | `export_mesh` | Экспортировать выбранные тела в полигональный формат с параметрами точности | ⬜ не реализован | Optional | P2 | Требуется проверка доступных форматов и единиц | ### Управление состоянием, восстановление и надёжность агентской работы | Метод | Назначение | Статус | Необходимость | Приоритет | Пробел / ограничение | |---|---|---|---|---|---| -| `transaction_begin` | Начать атомарную группу изменений и вернуть `transaction_id` | ⬜ не реализован | Core | P0 | Частично выполненная серия мутаций остаётся в документе | -| `transaction_commit` | Зафиксировать группу после проверок | ⬜ не реализован | Core | P0 | Нет явной границы успешной серии действий | -| `transaction_rollback` | Откатить группу при ошибке или провале валидации | ⬜ не реализован | Core | P0 | Нет безопасного автоматического восстановления | -| `checkpoint_create` | Создать именованный снимок состояния документа | ⬜ не реализован | Core | P0 | Нужен надёжный рубеж перед рискованной операцией | -| `checkpoint_restore` | Восстановить документ из checkpoint и вернуть новую ревизию | ⬜ не реализован | Core | P0 | Нет восстановления после цепочки успешных, но неверных мутаций | -| `undo` | Отменить последнее изменение указанного документа | ⬜ не реализован | Advanced | P1 | Нет интерактивного пошагового исправления | -| `redo` | Повторить отменённое изменение указанного документа | ⬜ не реализован | Advanced | P1 | Нет симметрии undo/redo | +| `transaction_begin` | Начать атомарную группу изменений | ⛔ ограничен платформой | Optional | P2 | Надёжная атомарная граница не подтверждена; требуется техническое исследование | +| `transaction_commit` | Зафиксировать атомарную группу изменений | ⛔ ограничен платформой | Optional | P2 | Реалистичность зависит от подтверждения общей транзакционной модели | +| `transaction_rollback` | Откатить атомарную группу изменений | ⛔ ограничен платформой | Optional | P2 | Надёжный полный откат группы не подтверждён; требуется техническое исследование | +| `state_checkpoint` | Создать детерминированный именованный снимок состояния документа | ⬜ не реализован | Core | P0 | Нужен подтверждаемый рубеж перед рискованной операцией | +| `state_restore` | Восстановить документ из снимка состояния и вернуть новую ревизию | ⬜ не реализован | Core | P0 | Нет детерминированного fallback после неверной цепочки мутаций | +| `undo` | Отменить последнее изменение указанного документа | ⬜ не реализован | Core | P0 | Нет пошагового исправления | +| `redo` | Повторить отменённое изменение указанного документа | ⬜ не реализован | Core | P0 | Нет симметрии undo/redo | | `operation_cancel` | Запросить отмену длительной операции и сообщить фактический результат | ⛔ ограничен платформой | Optional | P2 | Надёжная остановка уже начавшейся операции не подтверждена; требуется техническое исследование | | `session_recover` | Восстановить внешний контекст после сбоя: документы, активность, ревизии и адреса | ⬜ не реализован | Core | P0 | Сессионные идентификаторы теряются при сбросе или переподключении | @@ -234,30 +232,27 @@ ### P0 — замыкание автономного цикла -- Multi-document и явный контекст: `list_documents`, `document_activate`, `document_describe`; существующие `document_create`, `document_open`, `document_save_as`, `document_save`, `document_close`, `document_active` должны возвращать или принимать `document_id`. -- Адресуемые эскизы: `list_sketches`, `describe_sketch`, `list_sketch_entities`, `update_sketch_entity`, `delete_sketch_entity`, `delete_sketch`; все существующие `sketch_add_*` должны возвращать `entity_id`. -- Историческое редактирование: `describe_feature`, `update_feature`, `delete_feature`; отверстия и иные операции должны возвращать `feature_id`. -- Устойчивый выбор: `get_model_revision`, `list_vertices`, `resolve_selector`, `validate_selector`; это также замыкает ветку `vertex` метода `measure`. -- Многотельность: `delete_body` и выбор тел устойчивыми идентификаторами в существующих direct-edit операциях. -- Сборки: `describe_assembly`, `describe_component`, `assembly_set_component_placement`, `assembly_remove_component`, `list_mates`, `assembly_update_mate`, `assembly_remove_mate`, `assembly_check_interference`, `validate_assembly`. +- Документы: `list_documents`, `document_activate`, `document_describe`. +- Эскизы: `list_sketches`, `describe_sketch`, `list_sketch_entities`, `update_sketch_entity`, `delete_sketch_entity`, `delete_sketch`, `sketch_set_driving_dimension`. +- История и тела: `describe_feature`, `update_feature`, `delete_feature`, `delete_body`. +- Устойчивый выбор: `get_model_revision`, `list_vertices`, `resolve_selector`, `validate_selector`. +- Сборки: `assembly_add_mate`, `describe_assembly`, `describe_component`, `assembly_set_component_placement`, `assembly_remove_component`, `list_mates`, `assembly_update_mate`, `assembly_remove_mate`, `assembly_check_interference`, `validate_assembly`. - Чертёжный CRUD: `drawing_list_sheets`, `drawing_list_views`, `drawing_describe_view`, `drawing_update_view`, `drawing_delete_view`, `drawing_rebuild_views`, `drawing_list_annotations`, `drawing_update_annotation`, `drawing_delete_annotation`. -- Восстановление: `transaction_begin`, `transaction_commit`, `transaction_rollback`, `checkpoint_create`, `checkpoint_restore`, `session_recover`. -- Параметрический контур: `sketch_set_driving_dimension` остаётся платформенно ограниченным и требует отдельного решения до признания сценария полным. +- Восстановление: `state_checkpoint`, `state_restore`, `undo`, `redo`, `session_recover`. ### P1 — типовые профессиональные сценарии -- Управление деревом и вариантами: `set_feature_suppressed`, `document_set_properties`. -- Полный многотельный контур: `copy_body`, `transform_body`, `boolean_subtract`, `boolean_intersect`; расширение `boolean_union` и `mirror_body` выбором операндов. -- Сборочные связи: `assembly_add_concentric_mate`, `assembly_add_oriented_mate`, `assembly_set_component_suppressed`. +- Документы и эскизы: `document_set_properties`, `list_sketch_constraints`, `sketch_set_constraint`, `sketch_delete_constraint`. +- История и многотельность: `set_feature_suppressed`, `move_body`, `copy_body`, `boolean_subtract`, `boolean_intersect`. +- Варианты сборки: `assembly_set_component_suppressed`. - Профессиональное оформление: `drawing_add_sheet`, `drawing_delete_sheet`, `drawing_create_section_view`, `drawing_create_detail_view`, `drawing_add_datum`, `drawing_add_geometric_tolerance`, `drawing_add_centerline`, `drawing_add_center_mark`. -- Выпуск: `export_drawing` с выбором листов и проверяемым отчётом. -- Пошаговое исправление: `undo`, `redo`. +- Выпуск: `export_drawing`. ### P2 — расширение охвата -- Дополнительные представления: `drawing_create_local_view`. -- Дополнительные форматы: `import_model`, `export_model`, `import_drawing`, `export_mesh` после поформатной проверки. -- Длительные операции: `operation_cancel` после подтверждения надёжного внешнего поведения. +- Дополнительный вид: `drawing_create_local_view`. +- Дополнительные форматы: `import_model`, `export_model`, `import_drawing`, `export_drawing_exchange`, `export_mesh`. +- Исследовательские операции состояния: `transaction_begin`, `transaction_commit`, `transaction_rollback`, `operation_cancel`. ## Итоговая оценка