Files
kompas3d-mcp/docs/superpowers/NEXT-SESSION.md
T

7.5 KiB

Промт для следующей сессии

Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.


Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно, с коммитами и пушами в main; используй Codex для ревью каждой реализованной фичи. КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).

Текущее состояние (main, синхронизирован с origin)

  • 63 MCP-инструмента, 104 теста зелёных (60 unit + 44 integration).
  • Пакет A «богаче эскизы» — готов (дуга×2, эллипс, ломаная, многоугольник, сплайн, точка).
  • Пакет B «формообразующие» — основная часть готова: shell, rib, sweep, loft.
  • Пакет C «массивы и зеркало» — ГОТОВ: linear_pattern, circular_pattern, mirror_operation, mirror_body. Источник копирования — id операций из реестра _features (хелпер RequireFeature); оси — CoordinateAxis/CoordinateAxes (Core/Modeling).
  • hole — отверстие ГОТОВ (через API7, в API5 определения нет): HoleService (Core/Modeling/HoleService.cs), простое цилиндрическое, сквозное/глухое. Прецедент: первая формообразующая на API7 (раньше API7 был только у move_face).
  • Пакет E начат: смещённая плоскость (sketch_create_on_offset_plane).
  • PartModeler разбит на partial: PartModeler.cs (ядро + helpers SelectFaceByIndex/ SelectEdgeByIndex + RequireFeature + NewParam<T>), .Sketch.cs (эскизы/примитивы), .Features.cs (операции, включая массивы/зеркало).
  • Чистые маппинги/валидация — в SketchGeometry (Core/Modeling); тип точки — SketchPoint (Host).
  • Прочитай память: kompas-formative-features-api5 (definition в API5), kompas-pattern-mirror-api5 (пакет C), kompas-hole-api7 (hole: только API7, направление по объёму).

Задача этой сессии (по приоритету)

  1. draft (уклон граней) — исследовать API7 (в API5 ksDraftDefinition НЕТ; в API7 есть IModelContainer.DraftsFromEdges / Inclines — проверить, как у hole). Если выйдет — реализовать по тому же паттерну, что HoleService (отдельный сервис на API7).
  2. Параметрика (пакет D): чтение/запись переменных модели, связи размеров (list_variables уже есть — добавить set/создание переменных через ksVariable/API7).
  3. Расширения hole: зенковка/цековка/коническое (ksHTCounterbore/Countersinking/Conic + параметрические подынтерфейсы), резьба (ShowThread/IThread).
  4. Расширения пакета C: 2D-сетка линейного массива, выбор оси по ребру, массив вдоль кривой (o3d_curveCopy=37).

Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую. Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.

Процесс на каждую операцию (отлажен в прошлых сессиях)

  1. Рефлексия interop — найди definition и Obj3dType. Пример команды (PowerShell):
    $a5=[Reflection.Assembly]::LoadFrom((Resolve-Path 'libs/kompas-interop/Kompas6API5.dll'))
    $c3=[Reflection.Assembly]::LoadFrom((Resolve-Path 'libs/kompas-interop/Kompas6Constants3D.dll'))
    # перечисли Obj3dType со словом array/pattern/mirror; покажи свойства/методы ksXxxDefinition
    
    Если definition в API5 нет — проверь API7 или отметь блокером (как draft).
  2. Семантику параметров уточняй через навык kompas-sdk-research (субагент Sonnet), не рой справку сам.
  3. Краткий спек в docs/superpowers/specs/ → коммит → ОТДАЙ НА РЕВЬЮ Codex (codex:rescue, --fresh для новой темы) → внеси обоснованные правки (оценивай технически, не слепо).
  4. Реализация TDD: метод в PartModeler.Features.cs (паттерн NewEntity(o3d_*)GetDefinition → настройка → Create → регистрация в _features, возврат id), инструмент в FeatureTools.cs, интеграционный тест в FeatureOpsTests.cs.
  5. Codex-ревью реализации (--resume того же треда) → правки.
  6. Документация через навык docs-delegate (Sonnet обновит README/CLAUDE/ARCHITECTURE/ presentation.html, сверит счётчики по факту).
  7. merge --no-ff в main, удали ветку, push origin main.

Паттерн интеграционного теста

CreateAsync(Part) → построить геометрию → операция → RebuildAsync → проверить объём (GetPartInfoAsync) и/или габарит (GetBoundingBoxAsync); finally CloseAsync. Считай ожидаемый объём аналитически и сверяй InRange ±5%; для нестрогих форм — ±10% или проверка габарита / «after vs before».

Ключевые ловушки (проверено)

  • Выбор грани/ребра — по стабильному индексу из list_faces/list_edges (helper'ы SelectFaceByIndex/SelectEdgeByIndex в ядре); индекс валиден, пока геометрия не менялась.
  • Углы у эскизных/формообразующих — в градусах.
  • param-структуры (эллипс/полигон/nurbs) — через NewParam<T>(StructType2DEnum), освобождать.
  • Валидацию выноси в SketchGeometry как чистые static (unit-тестируемо); проверяй double.IsFinite (NaN проходит через <= 0), дедуплицируй списки индексов.
  • НЕ освобождай транзитные RCW точечно в одной операции — это общий отложенный долг (OPEN_QUESTIONS v2-2), консистентность важнее; единый рефакторинг — отдельной задачей.
  • Команды: dotnet build -c Release; dotnet test --filter "Category=Unit"; dotnet test --filter "Category=Integration" (нужен запущенный КОМПАС).

Начни с рефлексии interop для массивов (пакет C) и kompas-sdk-research по найденному definition, затем первый инкремент — линейный массив.