Files
kompas3d-mcp/docs/presentation.html
T
mikhail 3a98afc67f chore: initial skeleton + KOMPAS connection spike (S1/S2)
Зафиксирован фундамент проекта MCP-сервера КОМПАС-3D:

- docs/: ARCHITECTURE.md, IMPLEMENTATION_PLAN.md, presentation.html
- tools/kdoc.py: навигатор по справке SDK
- libs/kompas-interop/: вендорские interop-сборки КОМПАС из SDK
- src/Kompas.Mcp.ConnectSpike: net8.0-windows консоль, доказывает
  работу COM-интеропа и attach/launch подключения к КОМПАС
  (IApplication, версия 24.0)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 23:28:29 +03:00

345 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>КОМПАС-3D MCP — управление CAD через LLM</title>
<style>
:root{
--bg:#0b1020; --bg2:#121a33; --card:#161f3d; --card2:#1b264a;
--txt:#e8edf7; --muted:#9aa7c7; --line:#26335c;
--accent:#4da3ff; --accent2:#7c5cff; --green:#36d399; --amber:#fbbd23;
--grad:linear-gradient(135deg,#4da3ff 0%,#7c5cff 100%);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
font-family:"Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;
background:radial-gradient(1200px 600px at 80% -10%,#1c2750 0%,var(--bg) 55%) no-repeat,var(--bg);
color:var(--txt);line-height:1.6;-webkit-font-smoothing:antialiased;
}
.wrap{max-width:1120px;margin:0 auto;padding:0 24px}
section{padding:64px 0}
h2{font-size:30px;margin-bottom:8px;letter-spacing:-.5px}
.sub{color:var(--muted);margin-bottom:36px;max-width:640px}
.eyebrow{color:var(--accent);font-weight:700;font-size:13px;letter-spacing:2px;text-transform:uppercase}
/* HERO */
.hero{padding:96px 0 72px;position:relative;overflow:hidden}
.hero::after{content:"";position:absolute;inset:0;background:
radial-gradient(600px 300px at 15% 20%,rgba(124,92,255,.18),transparent 60%);
pointer-events:none}
.badge{display:inline-flex;align-items:center;gap:8px;background:rgba(77,163,255,.1);
border:1px solid var(--line);color:var(--accent);padding:6px 14px;border-radius:999px;
font-size:13px;font-weight:600;margin-bottom:22px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--amber);box-shadow:0 0 10px var(--amber)}
.hero h1{font-size:54px;line-height:1.05;letter-spacing:-1.5px;margin-bottom:18px;font-weight:800}
.hero h1 .g{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p.lead{font-size:19px;color:var(--muted);max-width:680px;margin-bottom:30px}
.chips{display:flex;flex-wrap:wrap;gap:10px}
.chip{background:var(--card);border:1px solid var(--line);border-radius:10px;
padding:8px 14px;font-size:13px;font-weight:600;color:#cdd7f2}
.chip b{color:var(--accent)}
/* GRID CARDS */
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.card{background:linear-gradient(180deg,var(--card),var(--card2));border:1px solid var(--line);
border-radius:16px;padding:24px;transition:transform .2s,border-color .2s}
.card:hover{transform:translateY(-4px);border-color:var(--accent)}
.card .ic{width:44px;height:44px;border-radius:12px;background:var(--grad);
display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
.card h3{font-size:17px;margin-bottom:6px}
.card p{color:var(--muted);font-size:14px}
.card code{background:rgba(255,255,255,.06);padding:1px 6px;border-radius:5px;font-size:12px;color:#cdd7f2}
/* WORKFLOW */
.flow{display:flex;align-items:stretch;gap:0;flex-wrap:wrap;margin-top:8px}
.step{flex:1;min-width:150px;background:var(--card);border:1px solid var(--line);
border-radius:14px;padding:18px 16px;position:relative;text-align:center}
.step .n{font-size:12px;color:var(--accent);font-weight:700}
.step h4{font-size:15px;margin:6px 0 4px}
.step p{font-size:12.5px;color:var(--muted)}
.arrow{display:flex;align-items:center;justify-content:center;color:var(--accent2);
font-size:24px;padding:0 8px}
.loopnote{margin-top:14px;color:var(--muted);font-size:14px;text-align:center}
.loopnote b{color:var(--green)}
/* STACK */
.stack{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.scard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;text-align:center}
.scard .k{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:1px}
.scard .v{font-size:18px;font-weight:700;margin-top:6px;color:#dfe7fb}
.scard .v small{display:block;font-size:12px;color:var(--muted);font-weight:500;margin-top:3px}
/* TODO */
.todo-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.panel{background:linear-gradient(180deg,var(--card),var(--card2));border:1px solid var(--line);
border-radius:16px;padding:26px}
.panel h3{font-size:18px;margin-bottom:4px;display:flex;align-items:center;gap:10px}
.tag{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;letter-spacing:.5px}
.tag.done{background:rgba(54,211,153,.15);color:var(--green);border:1px solid rgba(54,211,153,.3)}
.tag.now{background:rgba(251,189,35,.15);color:var(--amber);border:1px solid rgba(251,189,35,.3)}
.tag.next{background:rgba(124,92,255,.15);color:#b9a6ff;border:1px solid rgba(124,92,255,.3)}
.panel .meta{color:var(--muted);font-size:13px;margin-bottom:16px}
ul.list{list-style:none}
ul.list li{display:flex;gap:11px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:14.5px}
ul.list li:last-child{border-bottom:0}
.mark{flex:0 0 20px;width:20px;height:20px;border-radius:6px;display:flex;align-items:center;
justify-content:center;font-size:12px;font-weight:700;margin-top:2px}
.mark.ok{background:var(--green);color:#04231a}
.mark.todo{background:transparent;border:1.5px solid var(--line)}
.mark.wip{background:var(--amber);color:#3a2c00}
li.muted span.t{color:var(--muted)}
/* progress */
.prog{margin:18px 0 4px}
.bar{height:10px;border-radius:999px;background:#0e1530;overflow:hidden;border:1px solid var(--line)}
.bar > i{display:block;height:100%;background:var(--grad);border-radius:999px}
.progrow{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);margin-bottom:8px}
/* roadmap timeline */
.timeline{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-top:8px}
.tl{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 16px;position:relative}
.tl .ph{font-size:12px;font-weight:700;color:var(--accent)}
.tl h4{font-size:15px;margin:8px 0 6px}
.tl p{font-size:12.5px;color:var(--muted)}
.tl.cur{border-color:var(--amber);box-shadow:0 0 0 1px rgba(251,189,35,.25)}
footer{border-top:1px solid var(--line);padding:34px 0;color:var(--muted);font-size:14px}
footer a{color:var(--accent);text-decoration:none}
footer a:hover{text-decoration:underline}
.links{display:flex;gap:20px;flex-wrap:wrap;margin-top:10px}
@media(max-width:880px){
.grid,.stack{grid-template-columns:1fr 1fr}
.todo-grid{grid-template-columns:1fr}
.timeline{grid-template-columns:1fr 1fr}
.hero h1{font-size:40px}
.arrow{transform:rotate(90deg)}
}
@media(max-width:520px){.grid,.stack,.timeline{grid-template-columns:1fr}}
</style>
</head>
<body>
<!-- HERO -->
<header class="hero">
<div class="wrap">
<span class="badge"><span class="dot" style="background:var(--green);box-shadow:0 0 10px var(--green)"></span> Статус: спайки S1–S2 пройдены · подключение к КОМПАС работает</span>
<h1>КОМПАС-3D <span class="g">MCP-сервер</span><br>управление CAD языком LLM</h1>
<p class="lead">MCP-сервер, который превращает операции КОМПАС-3D — создание документов,
эскизы, 3D-операции, параметры — в инструменты для языковой модели. Под капотом —
COM Automation API АСКОН.</p>
<div class="chips">
<span class="chip"><b>.NET 8</b> · C#</span>
<span class="chip">транспорт <b>stdio</b></span>
<span class="chip"><b>COM</b> Automation · API7 / API5</span>
<span class="chip">Windows <b>x64</b></span>
<span class="chip">КОМПАС-3D <b>v24 Home</b></span>
<span class="chip">👁 <b>зрение агента</b></span>
</div>
</div>
</header>
<!-- KEY FEATURES -->
<section id="features">
<div class="wrap">
<div class="eyebrow">Возможности</div>
<h2>Что умеет MCP-сервер</h2>
<p class="sub">Инструменты сгруппированы вокруг живого инженерного цикла моделирования —
от подключения к КОМПАС до построения и опроса детали.</p>
<div class="grid">
<div class="card">
<div class="ic">🔌</div>
<h3>Подключение к КОМПАС</h3>
<p>Attach к запущенному или launch нового экземпляра по ProgID, переход на API7
через <code>ksGetApplication7()</code>, управление видимостью окна.</p>
</div>
<div class="card">
<div class="ic">📄</div>
<h3>Документы</h3>
<p>Создание, открытие, сохранение и закрытие деталей, сборок, чертежей и фрагментов
через <code>IDocuments</code>.</p>
</div>
<div class="card">
<div class="ic">✏️</div>
<h3>Эскизы</h3>
<p>Эскиз на плоскости или грани, примитивы (линия, окружность, дуга,
прямоугольник), безопасный цикл <code>BeginEdit → EndEdit</code>.</p>
</div>
<div class="card">
<div class="ic">🧊</div>
<h3>3D-операции</h3>
<p>Выдавливание и вырез, вращение, перестроение. Управление направлением, глубиной и
типом окончания (<code>ksEndTypeEnum</code>).</p>
</div>
<div class="card">
<div class="ic">🎯</div>
<h3>Выборка и запросы</h3>
<p>Выбор грани точкой для следующего эскиза, перечисление тел и граней,
массово-центровочные характеристики детали.</p>
</div>
<div class="card">
<div class="ic">👁️</div>
<h3>Зрение агента</h3>
<p>Рендер модели в PNG прямо в память (<code>resultArrayBytes</code>) и возврат как
image-контент MCP — агент <b>видит</b> результат и строит пошагово. Плюс <code>set_view</code>:
ориентация и zoom-to-fit перед снимком.</p>
</div>
<div class="card">
<div class="ic">🛟</div>
<h3>Escape-hatch</h3>
<p>Прямой вызов команд КОМПАС через <code>ExecuteKompasCommand</code> для того,
что ещё не обёрнуто в типизированные инструменты.</p>
</div>
</div>
</div>
</section>
<!-- WORKFLOW -->
<section id="workflow" style="background:linear-gradient(180deg,transparent,rgba(124,92,255,.05))">
<div class="wrap">
<div class="eyebrow">Ядро сценария</div>
<h2>Цикл «эскиз → операция → эскиз»</h2>
<p class="sub">Главный пользовательский поток v1 — итеративное параметрическое моделирование
с визуальной проверкой: рисуем профиль, превращаем в объём, <b>смотрим на результат</b>,
выбираем грань, рисуем следующий профиль.</p>
<div class="flow">
<div class="step"><div class="n">01</div><h4>Документ</h4><p>создать деталь (part)</p></div>
<div class="arrow"></div>
<div class="step"><div class="n">02</div><h4>Эскиз</h4><p>на плоскости XOY, профиль</p></div>
<div class="arrow"></div>
<div class="step"><div class="n">03</div><h4>Выдавить</h4><p>boss-операция → тело</p></div>
<div class="arrow"></div>
<div class="step" style="border-color:var(--accent2)"><div class="n" style="color:var(--accent2)">04 👁</div><h4>Снимок</h4><p>агент видит результат</p></div>
<div class="arrow"></div>
<div class="step"><div class="n">05</div><h4>Выбрать грань</h4><p>по точке на теле</p></div>
<div class="arrow"></div>
<div class="step"><div class="n">06</div><h4>Вырез</h4><p>новый эскиз → cut</p></div>
</div>
<p class="loopnote"><b>Повторять со зрением</b> — снимок → новая грань → новый эскиз → новая операция → снова снимок, пока деталь не готова</p>
</div>
</section>
<!-- STACK -->
<section id="stack">
<div class="wrap">
<div class="eyebrow">Технологии</div>
<h2>Стек решения</h2>
<p class="sub">Выбор обоснован первоклассным COM-интеропом .NET и официальным C# MCP SDK —
подробности в документе архитектуры.</p>
<div class="stack">
<div class="scard"><div class="k">Платформа</div><div class="v">.NET 8<small>C# · win-x64</small></div></div>
<div class="scard"><div class="k">MCP SDK</div><div class="v">ModelContextProtocol<small>транспорт stdio</small></div></div>
<div class="scard"><div class="k">Интероп</div><div class="v">COM Automation<small>API7 + API5 (.tlb)</small></div></div>
<div class="scard"><div class="k">Потоки</div><div class="v">STA-поток<small>насос сообщений</small></div></div>
</div>
</div>
</section>
<!-- TODO -->
<section id="todo" style="background:linear-gradient(180deg,transparent,rgba(77,163,255,.05))">
<div class="wrap">
<div class="eyebrow">Прогресс</div>
<h2>TODO проекта</h2>
<p class="sub">Честный срез состояния: фундамент подготовки готов, реализация сервера —
впереди.</p>
<div class="prog">
<div class="progrow"><span>Общий прогресс</span><span>Спайки пройдены · идёт фундамент v1</span></div>
<div class="bar"><i style="width:34%"></i></div>
</div>
<div class="todo-grid" style="margin-top:26px">
<!-- DONE -->
<div class="panel">
<h3>Подготовка <span class="tag done">ГОТОВО</span></h3>
<p class="meta">Исследование, документация и инструменты разработчика</p>
<ul class="list">
<li class="muted"><span class="mark ok"></span><span class="t">Исследование SDK и COM API (API5/API7, паттерны подключения)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">CLAUDE.md — гайд по репозиторию и API</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Навигатор по справке: <code>tools/kdoc.py</code> + индекс на 26k стр.</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Документ архитектуры <code>docs/ARCHITECTURE.md</code></span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Выбор стека: .NET/C#, stdio, цикл «эскиз↔операция»</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Решение о визуальной обратной связи (зрение агента, рендер в растр)</span></li>
</ul>
</div>
<!-- NOW -->
<div class="panel">
<h3>Фундамент v1 <span class="tag now">В РАБОТЕ</span></h3>
<p class="meta">Скелет сервера и связь с КОМПАС</p>
<ul class="list">
<li class="muted"><span class="mark ok"></span><span class="t">Спайк S1: interop-сборки собираются под <code>net8.0-windows</code></span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Спайк S2: подключение к КОМПАС (launch/attach, IApplication, версия 24.0)</span></li>
<li><span class="mark wip">~</span><span>Скелет решения (git, <code>.slnx</code>, Directory.Build.props)</span></li>
<li><span class="mark todo"></span><span>Маппинг перечислений (enum ↔ строка)</span></li>
<li><span class="mark todo"></span><span>STA-поток + диспетчер + насос сообщений</span></li>
<li><span class="mark todo"></span><span>MCP-хост на stdio, логи в stderr</span></li>
<li><span class="mark todo"></span><span>Трансляция ошибок COM в MCP-ответы</span></li>
</ul>
</div>
<!-- TOOLS -->
<div class="panel">
<h3>Инструменты v1 <span class="tag next">ДАЛЕЕ</span></h3>
<p class="meta">Покрытие центрального цикла моделирования</p>
<ul class="list">
<li><span class="mark todo"></span><span><code>System</code>: connect · set_visible · status</span></li>
<li><span class="mark todo"></span><span><code>Documents</code>: create · open · save · close · active</span></li>
<li><span class="mark todo"></span><span><code>Sketch</code>: create · add line/circle/arc/rect · close</span></li>
<li><span class="mark todo"></span><span><code>Features</code>: extrude boss/cut · revolve · rebuild</span></li>
<li><span class="mark todo"></span><span><code>Query</code>: select_face · list_bodies · get_part_info</span></li>
<li><span class="mark todo"></span><span><code>Vision</code>: model_snapshot · set_view 👁️</span></li>
</ul>
</div>
<!-- QUALITY -->
<div class="panel">
<h3>Качество и поставка <span class="tag next">ДАЛЕЕ</span></h3>
<p class="meta">Тесты, сборка, интеграция с клиентом</p>
<ul class="list">
<li><span class="mark todo"></span><span>Unit-тесты чистой логики (маппинг, валидация)</span></li>
<li><span class="mark todo"></span><span>Интеграционные тесты с КОМПАС (категория Integration)</span></li>
<li><span class="mark todo"></span><span>Smoke через MCP Inspector</span></li>
<li><span class="mark todo"></span><span>Сборка <code>kompas-mcp.exe</code> (win-x64)</span></li>
<li><span class="mark todo"></span><span>Регистрация stdio-сервера в конфиге клиента</span></li>
</ul>
</div>
</div>
</div>
</section>
<!-- ROADMAP -->
<section id="roadmap">
<div class="wrap">
<div class="eyebrow">Дорожная карта</div>
<h2>После v1</h2>
<p class="sub">Наращиваем покрытие API волнами — от простых операций к параметрике,
черчению и сборкам.</p>
<div class="timeline">
<div class="tl cur"><div class="ph">v1 · сейчас</div><h4>Цикл моделирования</h4><p>Документы, эскизы, выдавливание/вырез, вращение, выборка граней</p></div>
<div class="tl"><div class="ph">v2</div><h4>Операции</h4><p>Скругление, фаска, оболочка, ребро, лофт, кинематика, массивы</p></div>
<div class="tl"><div class="ph">v3</div><h4>Параметрика</h4><p>Переменные <code>IVariable7</code>, свойства <code>IPropertyMng</code>, формулы</p></div>
<div class="tl"><div class="ph">v4</div><h4>2D-черчение</h4><p>Виды, размеры, тексты, штриховки; спецификации</p></div>
<div class="tl"><div class="ph">v5</div><h4>Сборки и экспорт</h4><p>Компоненты, сопряжения, конвертеры (STEP), HTTP/SSE-транспорт</p></div>
</div>
</div>
</section>
<footer>
<div class="wrap">
<div>КОМПАС-3D MCP · документация проекта</div>
<div class="links">
<a href="ARCHITECTURE.md">📐 Документ архитектуры</a>
<a href="IMPLEMENTATION_PLAN.md">🛠️ План реализации</a>
<a href="../CLAUDE.md">📘 CLAUDE.md</a>
<a href="KOMPAS_SDK_ru-RU/index.html">📚 Справка SDK КОМПАС-3D</a>
<a href="https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/index.html">🌐 Онлайн-справка АСКОН</a>
</div>
</div>
</footer>
</body>
</html>