10 KiB
Промт для следующей сессии
Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.
Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно,
с коммитами и пушами в main; используй Codex для ревью каждой реализованной фичи.
КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).
Текущее состояние (main, синхронизирован с origin)
- 70 MCP-инструментов, 119 тестов зелёных (69 unit + 50 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). Все типы: простое (hole), цековка (hole_counterbore,ksHTCounterbore), зенковка (hole_countersink,ksHTCountersinking), коническое (hole_conic,ksHTConic).HoleCoreрефакторен подconfigure-колбэк (HoleParametersпослеHoleType). Прецедент: первая формообразующая на API7. Направление в тело — по убыли объёма. Ещё не сделано: резьба (ShowThread/IThread) — трудно тестировать (нет Δобъёма).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 + цековка/зенковка),kompas-variables-api5(переменные),kompas-parametric-sketch-findings(тупик — не повторять).
ОТРИЦАТЕЛЬНЫЙ результат (не повторять)
- Параметрические эскизы (переменная двигает геометрию) — НЕДОСТИЖИМЫ через доступный COM-API.
Решающий spike:
ksCDimWithVariable(IDrawingObject1.NewConstraint)Create()=FALSE из внешней автоматизации;ksCFixedLenghtстроится, но игнорируетExpressionсо ссылкой на переменную. Полная разведка:docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md. Параметрика ограничена CRUD переменных (готово). НЕ тратить время на этот путь повторно.
Задача следующей сессии (по приоритету)
- Расширения пакета C: 2D-сетка линейного массива (2-я ось у
ksMeshCopyDefinition—SetAxis2+count2), выбор оси массива/нейтральной плоскости по ребру/грани, массив вдоль кривой (o3d_curveCopy=37/ksCurveCopyDefinition). Низкий риск (паттерн пакета C известен). - Расширения draft: уклон от ребра (
IDraftFromEdges, API7); нейтральная плоскость по грани. - 2D-чертёж / сборки — крупные отдельные вехи (ассоциативные виды детали; вставка компонентов, сопряжения). Самый ценный нереализованный класс после геометрии детали.
- Резьба отверстия (
ShowThread/IThread) — мелочь, трудно тестировать.
Типы отверстий завершены (простое/цековка/зенковка/коническое). Параметрика — CRUD переменных (управление геометрией недостижимо, см. findings). Деталь как класс операций близка к насыщению — дальше логично 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, затем первый инкремент — линейный массив.