9.4 KiB
Промт для следующей сессии
Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.
Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно,
с коммитами и пушами в main; используй Codex для ревью каждой реализованной фичи.
КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).
Текущее состояние (main, синхронизирован с origin)
- 67 MCP-инструментов, 116 тестов зелёных (69 unit + 47 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).draft— уклон граней ГОТОВ (через API5ksInclineDefinition/o3d_incline=42— операция «Incline», не «Draft»; стандартный паттернPartModeler.Features.cs, регистрируется в_features). Эмпирика:direction=false=расширение,true=сужение → маппинг!outward.- Пакет D «параметрика» НАЧАТ: переменные модели —
create_variable,set_variable,delete_variable(VariableService, API5ksVariable). Создание на коллекции корневогоksFeature(СВОЙСТВОVariableCollection);Expressionведущее;RebuildModel+re-fetch.list_variablesпочинен (видит все переменные). ОГРАНИЧЕНИЕ: переменные драйвят геометрию лишь в параметрических эскизах (у нас эскизы на литералах — пока не драйвят). - Пакет E начат: смещённая плоскость (
sketch_create_on_offset_plane). PartModelerразбит на partial:PartModeler.cs(ядро + helpersSelectFaceByIndex/SelectEdgeByIndex+RequireFeature+NewParam<T>),.Sketch.cs(эскизы/примитивы),.Features.cs(операции, включая массивы/зеркало/уклон). API7-сервисы:HoleService,FaceEditService.- Чистые маппинги/валидация — в
SketchGeometry(Core/Modeling); тип точки —SketchPoint(Host). - Прочитай память:
kompas-formative-features-api5(definition в API5; draft=Incline есть),kompas-pattern-mirror-api5(пакет C),kompas-hole-api7(hole: только API7),kompas-variables-api5(переменные: create на ksFeature, ограничение про геометрию).
Задача этой сессии (по приоритету)
- Параметрические эскизы РАЗВЕДАНЫ — путь намечен, но это КРУПНАЯ отдельная подсистема (не
инкремент). Установлено: управляющий размер
ksCDimWithVariableтолько в API7; API5-эскиз через API7ISketch.Curves=null; нужен путьISketch.BeginEdit→FragmentDocument→IDrawingContainer(новая API7-подсистема построения эскизов). См.docs/superpowers/specs/2026-05-27-parametric-sketch-findings.mdи памятьkompas-parametric-sketch-findings. Начинать с минимального spike (отрезок через API7 IDrawingContainer → ksCDimWithVariable с именем → сменить переменную → перестроить → длина изменилась?). Ключевой риск: реагирует ли решатель эскиза из внешней автоматизации. - Расширения hole: зенковка/цековка/коническое отверстие (
ksHTCounterbore=1/Countersinking=2/ Conic=4+ подынтерфейсыISpotfacingHoleParameters/IConicHoleParameters/…), резьба. Меньше неопределённости — хороший следующий инкремент. - Расширения draft: уклон от ребра (
IDraftFromEdges, API7); нейтральная плоскость по грани. - Расширения пакета C: 2D-сетка линейного массива, выбор оси по ребру, массив вдоль кривой
(
o3d_curveCopy=37). - 2D-чертёж / сборки — крупные отдельные направления.
Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую. Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.
Процесс на каждую операцию (отлажен в прошлых сессиях)
- Рефлексия interop — найди definition и
Obj3dType. Пример команды (PowerShell):Если definition в API5 нет — проверь API7 или отметь блокером (как draft).$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 - Семантику параметров уточняй через навык
kompas-sdk-research(субагент Sonnet), не рой справку сам. - Краткий спек в
docs/superpowers/specs/→ коммит → ОТДАЙ НА РЕВЬЮ Codex (codex:rescue,--freshдля новой темы) → внеси обоснованные правки (оценивай технически, не слепо). - Реализация TDD: метод в
PartModeler.Features.cs(паттернNewEntity(o3d_*)→GetDefinition→ настройка →Create→ регистрация в_features, возврат id), инструмент вFeatureTools.cs, интеграционный тест вFeatureOpsTests.cs. - Codex-ревью реализации (
--resumeтого же треда) → правки. - Документация через навык
docs-delegate(Sonnet обновит README/CLAUDE/ARCHITECTURE/ presentation.html, сверит счётчики по факту). 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, затем первый инкремент — линейный массив.