6.7 KiB
Промт для следующей сессии
Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.
Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно,
с коммитами и пушами в main; используй Codex для ревью каждой реализованной фичи.
КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).
Текущее состояние (main, синхронизирован с origin)
- 62 MCP-инструмента, 101 тест зелёных (60 unit + 41 integration).
- Пакет A «богаче эскизы» — готов (дуга×2, эллипс, ломаная, многоугольник, сплайн, точка).
- Пакет B «формообразующие» — основная часть готова: shell, rib, sweep, loft.
- Пакет C «массивы и зеркало» — ГОТОВ:
linear_pattern,circular_pattern,mirror_operation,mirror_body. Источник копирования — id операций из реестра_features(хелперRequireFeature); оси —CoordinateAxis/CoordinateAxes(Core/Modeling). - Пакет E начат: смещённая плоскость (
sketch_create_on_offset_plane). PartModelerразбит на partial:PartModeler.cs(ядро + helpersSelectFaceByIndex/SelectEdgeByIndex+RequireFeature+NewParam<T>),.Sketch.cs(эскизы/примитивы),.Features.cs(операции, включая массивы/зеркало).- Чистые маппинги/валидация — в
SketchGeometry(Core/Modeling); тип точки —SketchPoint(Host). - Прочитай память:
kompas-formative-features-api5(definition в API5),kompas-pattern-mirror-api5(пакет C: count вкл. оригинал, circular свойствами, ChooseBodies нерабочий).
Задача этой сессии (по приоритету)
hole— отверстие (исследоватьksHoleDefinition/o3d_*hole*— есть ли definition в API5).draft(уклон) — ТОЛЬКО если найдёшь способ через API7 (в API5ksDraftDefinitionНЕТ, толькоo3d_DraftFromEdges=644без интерфейса — см. память).- Расширения пакета C при необходимости: 2D-сетка линейного массива, выбор оси по ребру,
массив вдоль кривой (
o3d_curveCopy=37).
Бери по одной операции за инкремент, доводи до зелёного и 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, затем первый инкремент — линейный массив.