diff --git a/CLAUDE.md b/CLAUDE.md index 4ee08a4..4742496 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,7 +27,8 @@ The base is committed to the repo (canonical) — no regeneration step. It cover **.NET 8 (`net8.0-windows`, x64), C#**, MCP via the official `ModelContextProtocol` SDK over **stdio**. **81 MCP tools, 267 tests green (163 unit + 104 integration).** v2 added: sketch-on-face (by point and by index), revolve (boss/cut + sketch axis), fillet/chamfer (edge-by-point and by index), and Query tools `get_part_info` (МЦХ), `get_bounding_box`, `list_faces`, `list_edges`. After v2: `import_step`, `export_step` (`ConversionService`, `ConversionTools`), `list_components` (assembly traversal via `TopPart → IParts7`). `move_face` (`FaceEditService`, `EditTools`) — direct B-rep face editing. After move_face: **structural model inspection** — `describe_model`, `list_features`, `list_bodies`, `list_variables`, `describe_face`, `describe_edge`, `measure` (`ModelInspectionService`, `InspectionTools`). `describe_model` is the preferred first call over `model_snapshot` (no token cost for image context; gives feature tree, bodies, variables, topology summary, МЦХ). Package A «richer sketches»: 7 new sketch primitives — `sketch_add_arc`, `sketch_add_arc_3points`, `sketch_add_ellipse`, `sketch_add_polyline`, `sketch_add_polygon`, `sketch_add_spline`, `sketch_add_point`. `PartModeler` refactored into partial classes: `PartModeler.cs` (core), `PartModeler.Sketch.cs` (2D primitives), `PartModeler.Features.cs` (extrude/revolve/fillet/chamfer). Static `SketchGeometry` class in `Core/Modeling`. Package B «forming ops» complete: **`shell`** (оболочка, `o3d_shellOperation=43`) + **`rib`** (ребро жёсткости, `o3d_ribOperation=44`) + **`sweep`** (кинематическая операция, `o3d_baseEvolution=45`) + **`loft`** (по сечениям, `o3d_baseLoft=30`). Auxiliary geometry (start of package E): **`sketch_create_on_offset_plane`** (смещённая плоскость, `o3d_planeOffset=14`) — unlocked `loft`. Additional Edit tools: **`split_solid_by_plane`**, **`move_body`**, **`boolean_union`**. Package C «patterns & mirror» complete: **`linear_pattern`** (линейный массив, `o3d_meshCopy=35`) + **`circular_pattern`** (круговой массив, `o3d_circularCopy=36`) + **`mirror_operation`** (зеркальная копия операций, `o3d_mirrorOperation=48`) + **`mirror_body`** (зеркало тела, `o3d_mirrorAllOperation=49`). **`hole`** (`HoleService`, `FeatureTools`) — цилиндрическое отверстие (сквозное или глухое) через **API7** (`IModelContainer`/`IHole3D`/`IHoleDisposal`); первая формообразующая операция на API7 (прецедент ранее только у `move_face`). **`hole_counterbore`** — отверстие с цековкой (`ksHTCounterbore`, `ISpotfacingHoleParameters`). **`hole_countersink`** — отверстие с зенковкой (`ksHTCountersinking`, `ICountersinkHoleParameters`). **`hole_conic`** — коническое отверстие (`ksHTConic`, `IConicHoleParameters`: `ConicType=ksCNAngle`, `ConicAngle`); завершает набор типов отверстий. `HoleCore` рефакторен: принимает `ksHoleTypeEnum holeType` + `Action configure` (настройка `HoleParameters` после установки `HoleType`, т.к. параметрический подынтерфейс недоступен до фиксации типа). Базовый `hole` = `ksHTBase` + `configure=null`. **`draft`** (уклон, `o3d_incline=42`) — наклон граней на угол относительно нейтральной координатной плоскости; реализован через **API5** `ksInclineDefinition` (операция называется Incline в API5, не Draft). Package D «parametrics» started: **`create_variable`**, **`set_variable`**, **`delete_variable`** (`VariableService`, `VariableTools`) — CRUD переменных модели через API5. `list_variables` исправлен (читает `ksPart.GetFeature().VariableCollection`, а не `ksPart.VariableCollection()`). **Ограничение:** переменная управляет геометрией только в параметрической модели (где размеры эскиза связаны с именем переменной); наши эскизы строятся литеральными координатами → `set_variable` хранит/вычисляет значение, но геометрию не меняет. Связь эскизных размеров с переменными (API2D) — не реализована. **Assembly class:** **`assembly_add_component`** (`AssemblyService`, `AssemblyTools`, namespace `Kompas.Mcp.Core.Assemblies`) — вставка компонента (.m3d/.a3d) из файла в активную сборку с заданием положения origin (мм, мировая СК сборки); возвращает индекс и имя вставленного компонента. **`assembly_add_mate`** — наложить сопряжение между гранями двух компонентов активной сборки, выбранными по мировым точкам; `mateType`: `coincidence` (грани заподлицо) | `distance` (зазор `value` мм, `value>0`); решатель позиционирует компоненты; возвращает статус (`valid`). Подтверждено вживую: `coincidence` (ширина сборки 120→40 мм), `distance(30)` (→70 мм). **2D-чертёж (веха, инкремент 3):** **`drawing_create_standard_views`** (`DrawingService`, `DrawingTools`, namespace `Kompas.Mcp.Core.Drawings`) — создать стандартные ассоциативные виды (спереди/сверху/слева) сохранённой 3D-модели (.m3d/.a3d) на активном чертеже; возвращает число созданных видов (3) и их номера (`ViewNumbers`). **`drawing_fill_title_block`** — заполнить графы основной надписи (штампа) активного чертежа: `designation` (обозначение, графа 2), `name` (наименование изделия, графа 1), `material` (материал, графа 3); передаются только нужные поля (null/пусто пропускается, нужно хотя бы одно); возвращает число заполненных граф. **`drawing_add_linear_dimension`** — поставить линейный размер на виде активного чертежа: точки (x1,y1)-(x2,y2) в локальной СК вида (мм), положение размерной линии (x3,y3), `orientation` (horizontal|vertical|parallel), `viewNumber` (0=первый вид); значение измеряется автоматически; возвращает значение и номер вида. **`drawing_add_diametral_dimension`** — поставить диаметральный размер (Ø) окружности: центр (xc,yc), `radius`, `angle` (направление выноски, градусы), `viewNumber`; значение = 2·radius, измеряется автоматически; возвращает диаметр и номер вида. **2D-чертёж (инкремент 5, базовое семейство размеров завершено):** **`drawing_add_radial_dimension`** — радиальный размер (R) окружности/дуги на виде: центр (xc,yc), `radius`, `angle` (направление выноски, °), `viewNumber`; значение измеряется автоматически и = **РАДИУСУ** (не диаметру — вопреки справке SDK); возвращает радиус и номер вида. **`drawing_add_angular_dimension`** — угловой размер между лучами (xc,yc)→(x1,y1) и (xc,yc)→(x2,y2) на виде: (x3,y3) — положение размерной дуги (задаёт её радиус), `angleType` (`min`|`max`|`more`) выбирает измеряемый угол, `viewNumber`; значение (градусы) измеряется автоматически; возвращает угол (°) и номер вида. **2D-чертёж (инкремент 6, текстовые обозначения):** **`drawing_add_rough`** — знак шероховатости на виде: `x,y` (положение, ЛСК вида, мм), `value` (текст параметра, напр. "Ra 1.6"; пусто = без значения), `signType` (`delete`|`without`|`none`), `angle` (наклон оси, °), `viewNumber`; возвращает значение (read-back) и номер вида. **`drawing_add_text`** — свободная текстовая надпись на виде стилем по умолчанию: `x,y` (точка привязки), `text` (`\n` — многострочно), `angle`, `viewNumber`; возвращает текст (read-back) и номер вида. **`drawing_set_technical_requirements`** — технические требования чертежа (единый блок над штампом, уровень документа): `text` (строки через `\n`); перезаписывает прежние; возвращает число строк. See [`README.md`](README.md) and [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md); design decisions/caveats in -[`docs/OPEN_QUESTIONS.md`](docs/OPEN_QUESTIONS.md). +[`docs/OPEN_QUESTIONS.md`](docs/OPEN_QUESTIONS.md). **Remaining stages backlog: [`docs/TODO.md`](docs/TODO.md)** +(canonical list of what's left, by class + cross-cutting; top of «2D-ЧЕРТЁЖ» = next priority). Principle: **MCP = translating SDK capabilities into general tools** (not task-specific). On top of MCP — skill **`.claude/skills/kompas-3d/`** with a methodology (playbooks, heuristics, validated in `usecases/`). Layout: `usecases/` (in .gitignore) is the proving ground; proven techniques are promoted to the skill. diff --git a/docs/TODO.md b/docs/TODO.md new file mode 100644 index 0000000..3f70749 --- /dev/null +++ b/docs/TODO.md @@ -0,0 +1,68 @@ +# TODO проекта kompas3d-mcp + +Канонический бэклог **оставшихся** этапов. Что уже сделано — см. `CLAUDE.md` → «Current state» и +`docs/ARCHITECTURE.md` §10 (дорожная карта). Метод работы над этапом — `docs/superpowers/NEXT-SESSION.md` +(спайк → спек → ревью Codex → TDD → ревью реализации → доки → merge/push). + +Статус: ☐ не начато · ▣ частично · ⛔ заблокировано (недостижимо текущим COM API) · ✓ сделано + +--- + +## Веха 2D-ЧЕРТЁЖ — текущий фокус (самый ценный растущий класс) + +Готово: стандартные виды, основная надпись (штамп), размеры (линейный/диаметральный/радиальный/угловой), +текстовые обозначения (шероховатость, свободный текст, технические требования). + +- ☐ **Ассоциативная привязка размеров и шероховатости к геометрии вида** (`BaseObject`/`BaseObject1/2`). + Обозначение «прилипает» к рёбрам/окружностям вида и обновляется с моделью, а не задаётся координатами. + Самый ценный следующий шаг («умный» чертёж). Требует спайка: перечисление геометрии вида + (`IDrawingContainer`: LineSegments/Circles/Arcs), выбор объекта по точке/индексу, связывание. +- ☐ **Рамка/формат листа** (A4/A3…, ориентация) — `ILayoutSheet`/`SheetFormat`. Быстрый фундаментальный + шаг, вероятно без спайка. Делает чертёж «правильным» по ГОСТ. +- ☐ **Выноски** (`Leaders`) — `ISymbols2DContainer.Leaders` (полки-выноски с текстом). +- ☐ **Обозначения баз** (`Bases`) — `ISymbols2DContainer.Bases`. +- ☐ **Допуски формы и расположения** (`Tolerances`) — `ISymbols2DContainer.Tolerances` (обычно в связке с базой). +- ☐ (опц.) **Доп. виды**: разрез/сечение (`CutLines`), выносной элемент (`RemoteElements`), местный вид. +- ☐ (опц.) **Осевые линии / обозначения центра** (`AxisLines`, `CentreMarkers`). + +## Класс СБОРКИ + +Готово: вставка компонента (`assembly_add_component`), сопряжения `coincidence`/`distance`. + +- ☐ **Доп. типы сопряжений**: `parallel`, `perpendicular`, `concentric`, `angle`, `tangency` + (`MateConstraintType`; механика `assembly_add_mate` готова — расширить enum `MateType` + валидаторы). +- ☐ **Авто-позиционирование** компонентов (решатель сопряжений по нескольким связям). +- ☐ **Спецификация** (`ISpecification`) — таблица состава изделия. + +## Класс ДЕТАЛЬ / параметрика / геометрия + +Готово: насыщен (эскизы, формообразующие, массивы/зеркало, отверстия, уклон, переменные, STEP, +прямое редактирование B-rep, структурный осмотр) — см. `ARCHITECTURE.md` §10. + +- ⛔ **Параметрические эскизы** (размер эскиза управляется переменной) — недостижимо через COM API + (`ksCDimWithVariable` не конструируется из внешней автоматизации). См. + `docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md`. **Не повторять** без новой информации. +- ☐ **Пакет E (вспомогательная геометрия, продолжение)**: ось, точка, плоскость по 3 точкам / по углу + (`sketch_create_on_offset_plane` уже есть). +- ▣ **Рассечение/перемещение тела как инструменты** (`SplitSolids`/`BodyRepositions`) — механика есть + (`split_solid_by_plane`, `move_body` частично), полный workflow split-reposition не продуктизирован. +- ☐ **Свойства документа** (`IPropertyMng`/`IPropertyKeeper`) — чтение/запись пользовательских свойств. + +## Сквозное / инфраструктура / технический долг + +- ☐ **Утечки транзитных RCW** (долг v2-2): `EntityCollection`/`GetTopPart`/QI-контейнеры/`IRoughParams` + и пр. не освобождаются → накопление за длинную сессию. Нужна единая стратегия (scope/`ReleaseComObject`), + не точечно — поэтому отложено как самостоятельный этап. +- ☐ **Насос сообщений / отмена**: `CancellationToken` не прерывает идущий COM-вызов; модальный диалог + КОМПАС блокирует всю очередь STA-потока. +- ☐ **Транспорт HTTP/SSE** — опция для удалённых клиентов (сейчас только stdio). + +## Навык / методика + +- ☐ Промотировать проверенные приёмы 2D-чертежа из `usecases/` в навык `.claude/skills/kompas-3d/` + (playbook «оформление чертежа»: виды → размеры → обозначения → штамп → тех. требования). + +--- + +*Обновлять по завершении каждого инкремента (отмечать ✓, добавлять вскрытые подэтапы). Источник +приоритетов для следующей сессии — верх раздела «2D-ЧЕРТЁЖ».* diff --git a/docs/superpowers/NEXT-SESSION.md b/docs/superpowers/NEXT-SESSION.md index b350f5f..657bff3 100644 --- a/docs/superpowers/NEXT-SESSION.md +++ b/docs/superpowers/NEXT-SESSION.md @@ -8,6 +8,9 @@ пушь в `main`, каждую фичу (спек и реализацию) прогоняй через ревью Codex. Для интеграционных тестов **КОМПАС-3D должен быть запущен**. +**Оставшиеся этапы — канонический бэклог: [`docs/TODO.md`](TODO.md)** (по классам + сквозное; верх раздела +«2D-ЧЕРТЁЖ» = следующий приоритет). Обновляй его по завершении каждого инкремента. + **Сначала сориентируйся** — этот промт задаёт направление, а не заменяет источники: - `CLAUDE.md` — текущее состояние, проверенные факты реализации и конвенции (STA-поток, COM-QI контейнеры, отложенный долг по RCW, команды сборки/тестов, инфраструктура интеграционных тестов).