93 lines
8.9 KiB
Markdown
93 lines
8.9 KiB
Markdown
# Промт для следующей сессии
|
|
|
|
Скопируй блок ниже как стартовое сообщение новой сессии 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` — уклон граней ГОТОВ (через **API5** `ksInclineDefinition`/`o3d_incline=42` — операция
|
|
«Incline», не «Draft»; стандартный паттерн `PartModeler.Features.cs`, регистрируется в `_features`).
|
|
Эмпирика: `direction=false`=расширение, `true`=сужение → маппинг `!outward`.
|
|
- Пакет D «параметрика» НАЧАТ: переменные модели — `create_variable`, `set_variable`,
|
|
`delete_variable` (`VariableService`, API5 `ksVariable`). Создание на коллекции корневого
|
|
`ksFeature` (СВОЙСТВО `VariableCollection`); `Expression` ведущее; `RebuildModel`+re-fetch.
|
|
`list_variables` починен (видит все переменные). ОГРАНИЧЕНИЕ: переменные драйвят геометрию лишь
|
|
в параметрических эскизах (у нас эскизы на литералах — пока не драйвят).
|
|
- Пакет E начат: смещённая плоскость (`sketch_create_on_offset_plane`).
|
|
- `PartModeler` разбит на partial: `PartModeler.cs` (ядро + helpers `SelectFaceByIndex`/
|
|
`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, ограничение про геометрию).
|
|
|
|
## Задача этой сессии (по приоритету)
|
|
1. **Параметрические эскизы** (завершить пакет D — даёт реальное управление геометрией): связать
|
|
размеры эскиза с именованными переменными через API2D (`ksDimension`/ограничения,
|
|
`ksSetDocVariableArray`/имя размера). Это ключ: тогда `set_variable` будет менять геометрию.
|
|
Исследовать через `kompas-sdk-research` (API2D размеров/ограничений эскиза).
|
|
2. Расширения hole: зенковка/цековка/коническое отверстие (`ksHTCounterbore=1/Countersinking=2/
|
|
Conic=4` + подынтерфейсы `ISpotfacingHoleParameters`/`IConicHoleParameters`/…), резьба.
|
|
3. Расширения draft: уклон от ребра (`IDraftFromEdges`, API7); нейтральная плоскость по грани.
|
|
4. Расширения пакета C: 2D-сетка линейного массива, выбор оси по ребру, массив вдоль кривой
|
|
(`o3d_curveCopy=37`).
|
|
5. 2D-чертёж / сборки — крупные отдельные направления.
|
|
|
|
Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую.
|
|
Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.
|
|
|
|
## Процесс на каждую операцию (отлажен в прошлых сессиях)
|
|
1. Рефлексия interop — найди definition и `Obj3dType`. Пример команды (PowerShell):
|
|
```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, затем первый инкремент — линейный массив.
|