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(ядро + 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),kompas-hole-api7(hole: только API7, направление по объёму).
Задача этой сессии (по приоритету)
draft(уклон граней) — исследовать API7 (в API5ksDraftDefinitionНЕТ; в API7 естьIModelContainer.DraftsFromEdges/Inclines— проверить, как у hole). Если выйдет — реализовать по тому же паттерну, чтоHoleService(отдельный сервис на API7).- Параметрика (пакет D): чтение/запись переменных модели, связи размеров (
list_variablesуже есть — добавить set/создание переменных черезksVariable/API7). - Расширения hole: зенковка/цековка/коническое (
ksHTCounterbore/Countersinking/Conic+ параметрические подынтерфейсы), резьба (ShowThread/IThread). - Расширения пакета 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, затем первый инкремент — линейный массив.