kompas 0.2.0 (из 53ac64e24c4930b29dc2125cf1b488e8b5a1463e)

This commit is contained in:
gitea-actions
2026-08-07 10:08:21 +00:00
parent 39ee6cb155
commit 3c091adbb2
10 changed files with 62 additions and 15 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ STEP/STL, осмотр и измерение модели — плюс два н
| | |
|---|---|
| **MCP-сервер `kompas`** | 85 инструментов: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование B-rep, переменные и параметризация, сборки и сопряжения, 2D-чертежи (виды, размеры, обозначения, тех. требования), STEP/STL, осмотр (`describe_model`, `list_faces`, `list_edges`, `measure`) |
| **MCP-сервер `kompas`** | 86 инструментов: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование B-rep, переменные и параметризация, **исполнения** (несколько геометрий одной модели в одном файле), сборки и сопряжения (в том числе по вспомогательным плоскостям и осям), 2D-чертежи (виды, размеры, обозначения, тех. требования), STEP/STL, осмотр (`describe_model`, `list_faces`, `list_edges`, `measure`) |
| **Навык `kompas-3d`** | методика построения: порядок работы, выбор подхода, проверенные приёмы и ловушки |
| **Навык `kompas-fdm-design`** | проектирование под FDM/FFF-печать: нависания, толщины стенок, зазоры и посадки, ориентация, бобышки и защёлки |
| **Команда `/kompas:doctor`** | диагностика установки |
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "kompas",
"displayName": "КОМПАС-3D",
"version": "0.1.0",
"version": "0.2.0",
"description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер",
"author": {
"name": "Shahovalov Mikhail",
Binary file not shown.
Binary file not shown.
+7 -7
View File
@@ -7,9 +7,9 @@
"targets": {
".NETCoreApp,Version=v8.0": {},
".NETCoreApp,Version=v8.0/win-x64": {
"kompas-mcp/0.1.0": {
"kompas-mcp/0.2.0": {
"dependencies": {
"Kompas.Mcp.Core": "0.1.0",
"Kompas.Mcp.Core": "0.2.0",
"Microsoft.Extensions.Hosting": "8.0.1",
"ModelContextProtocol": "2.0.0"
},
@@ -483,21 +483,21 @@
}
}
},
"Kompas.Mcp.Core/0.1.0": {
"Kompas.Mcp.Core/0.2.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.10"
},
"runtime": {
"Kompas.Mcp.Core.dll": {
"assemblyVersion": "0.1.0",
"fileVersion": "0.1.0.0"
"assemblyVersion": "0.2.0",
"fileVersion": "0.2.0.0"
}
}
}
}
},
"libraries": {
"kompas-mcp/0.1.0": {
"kompas-mcp/0.2.0": {
"type": "project",
"serviceable": false,
"sha512": ""
@@ -761,7 +761,7 @@
"path": "system.text.json/10.0.10",
"hashPath": "system.text.json.10.0.10.nupkg.sha512"
},
"Kompas.Mcp.Core/0.1.0": {
"Kompas.Mcp.Core/0.2.0": {
"type": "project",
"serviceable": false,
"sha512": ""
Binary file not shown.
Binary file not shown.
Binary file not shown.
+49 -2
View File
@@ -34,12 +34,21 @@ variables | errors | components` (`sections` сужает и ответ, и об
форма, ориентация, правдоподобность, «куда смотрит грань»): снимок дорог по контексту и менее
точен, чем числа.
**1а. Осмотр НЕ перестраивает документ.** Если модель правили снаружи (человек в GUI, соседний
агент) или операция запросила перестроение, `describe_model` покажет числа ДО правки — и ответ
будет выглядеть безупречным: размеры новые, положения старые, сопряжения валидны. Такой ответ сам
скажет «Документ ТРЕБУЕТ ПЕРЕСТРОЕНИЯ» (`needsRebuild: true`); увидел — `rebuild` и повтори осмотр,
выводов по непересчитанной модели не делай.
**2. Ответ мутирующей операции — это ТРИ проверки, читай все.** Любая операция может «пройти»
(`Create()==true`), оставив деталь в ошибке, поэтому каждая мутирующая операция сама дописывает
к ответу итог проверки построения и сводку состояния «Тел: N, объём V мм³»:
- **«⚠ N операц. в ошибке»** (напр. `et3dError54`) — деталь невалидна: не продолжай и не
экспортируй, исправь или переделай другим методом. «Построение чистое» = порядок.
Строки с «ℹ» — не отказы: «требуется перестроение» лечится `rebuild`, а «не определено
положение (N)» означает, что компоненту не хватает сопряжений или фиксации. Бросать из-за них
исправную сборку не нужно; в обеих названы имя и индекс компонента.
- **«Тел: 2»** там, где ждёшь одно тело, — деталь распалась: касание объединением не считается
(см. «Надписи»). Смотри на число ТЕЛ, а не граней: объединение сливает компланарные грани,
и счётчик граней законно остаётся прежним.
@@ -89,7 +98,12 @@ variables | errors | components` (`sections` сужает и ответ, и об
- *Обмен:* `import_model` (3D: step, iges, sat, xt, stl, c3d, jt, obj + родные форматы чужих САПР),
`import_drawing` (плоский .dxf/.dwg), `export_model` (`format=auto` по расширению: `.step`
точная геометрия в другую САПР, `.stl` — сетка в слайсер).
- *Сборка:* `assembly_add_component` (положение + поворот `rx/ry/rz`), `assembly_add_mate`
- *Исполнения:* `embodiment` (`set|add|delete|rename`; `kind=embodiment|mirror|variant`) — несколько
геометрий одной модели в одном файле; список с габаритом и массой каждого —
`describe_model(sections=embodiments)`.
- *Сборка:* `assembly_add_component` (положение + поворот `rx/ry/rz`, `embodiment` — какое исполнение
источника вставлять), `assembly_add_mate` (стороной может быть грань ИЛИ вспомогательный объект
`object1/object2`: плоскости и оси СК компонента, а без `componentIndex` — самой сборки)
(семь типов, `orientation`), `assembly_fix_component`, `assembly_delete`,
`assembly_check_interference` (не налезли ли детали друг на друга — больше это не видно нигде),
`assembly_transform_point` (`to=world|local` — точка между ЛСК компонента и СК сборки).
@@ -207,7 +221,8 @@ variables | errors | components` (`sections` сужает и ответ, и об
кроме помеченного `(ТЗ)`.
- **После связывания правка паспорта перестраивает деталь** (проверено: `set_variable(badge_T=4)`
габарит по Z 3.00 → 4.00, объём 5154.5 → 5861.5 мм³). Это и есть параметрическая модель,
а не комментарий к ней.
а не комментарий к ней. **До связывания — не перестраивает**, и `set_variable` говорит об этом
прямо: «⚠ НИЧЕГО НЕ ВЕДЁТ». Такой ответ — не успех: число поменялось, деталь нет.
- **Сверка и уборка в конце:** `describe_model(sections=variables)` помечает «⚠ ничего не ведёт» — это либо забытая
связь, либо мусор; разбери оба. `delete_variable(unused=true)` — только ПОСЛЕ `link_parameter`
на всё, что должно вести геометрию: вычистка не отличает мусор от несвязанного размера из ТЗ.
@@ -496,6 +511,38 @@ variables | errors | components` (`sections` сужает и ответ, и об
5. **Перед выдачей:** последняя операция «Построение чистое» → `export_model` (STEP для обмена,
STL для печати).
## Исполнения: одна модель — несколько геометрий
Типоразмеры (профиль на 100, 200, 500 мм), правое и левое зеркало, версии с отверстием и без часто
живут **в одном файле** исполнениями. Тогда всё, что ты меришь и экспортируешь, относится к
**текущему** исполнению — не к «детали вообще».
- **Признак замечаешь не ты, а ответ.** У модели с несколькими исполнениями `describe_model` сам
пишет, сколько их и какое сейчас текущее. Увидел эту строку — прежде чем считать массу или резать
чертёж, посмотри `describe_model(sections=embodiments)`: там габарит и масса **каждого**, и это
чтение ничего не переключает.
- **Переключение равно смене документа.** `embodiment(action="set", target="L200")` обнуляет
сессию построения: хендлы `sk_…`/`op_…` после него мертвы. Сохраняй документ до переключения.
- **Индекс живёт до первой правки дерева**: после `delete` индексы смещаются. Адресуй обозначением
(«L500»), а индексом — только сразу после того, как увидел список.
- **Строишь новое исполнение** — `embodiment(action="add", number="02")`; оно сразу становится
текущим, строй в нём немедленно. `depended=false` нужен, когда правки НЕ должны наследоваться от
родителя, — иначе изменение уедет и в него.
- **В сборку исполнение выбирается явно**: `assembly_add_component(embodiment="L500")`. Без
параметра встанет **базовое** исполнение, а не то, что сохранено в файле текущим. Обозначение
нужно ПОЛНОЕ («ПРОБА.001-01», а не «-01»); сервер откажет, если КОМПАС подсунет базовое.
- **«Удлинить эти профили с 500 до 600» — это смена исполнения экземпляра, а не новая вставка**:
`embodiment(action="set", target="L600", component=N)` и затем `rebuild`. Сопряжения при этом
**сохраняются** — пересоздание вставки, наоборот, порвало бы их все. Какие исполнения есть у
конкретного экземпляра, показывает `describe_model(sections="embodiments", component=N)`.
- **Выгнать всю линейку на печать** — `export_model(embodiment="all")`: каждое исполнение в свой
файл с суффиксом обозначения.
- **После смены исполнения в собранном узле проверь сопряжения** (`sections="mates"`): если у нового
исполнения нет объекта, на который опиралась связь, она рвётся — «ССЫЛКА ПОТЕРЯНА», `valid: false`,
компонент недоопределён. Что было потеряно, хранит имя сопряжения; `assembly_delete` сотрёт и его.
Подробности и границы — `help(topic="embodiments")`.
## Эвристики и подводные камни
- **Правила 1 и 2 действуют всегда:** осмотр структурный; «⚠ N операц. в ошибке» — в STEP/печать
+4 -4
View File
@@ -1,6 +1,6 @@
{
"version": "0.1.0",
"tag": "v0.1.0",
"sourceSha": "c7b0387a24cfeae3f19c052eb16d29dcc8030e31",
"built": "2026-08-06T21:03:33Z"
"version": "0.2.0",
"tag": "v0.2.0",
"sourceSha": "53ac64e24c4930b29dc2125cf1b488e8b5a1463e",
"built": "2026-08-07T10:08:21Z"
}