AITM не просто читает исходные файлы — он строит структурированную модель того, что на самом деле делает код, к которой можно обращаться запросами, и AI перестаёт гадать и начинает проверять.

Как AITM понимает проект

Behavioral Contracts

Каждую значимую функцию кодовой базы можно зафиксировать как Behavioral Contract: машиночитаемую спецификацию с идентификатором, модулем, к которому она относится, однострочным описанием поведения, точным списком затрагиваемых файлов, предупреждением об опасной зоне и оценкой достоверности. Contracts хранятся по проектам в локальной базе SQLite, а AI запрашивает их через GraphQL до того, как коснётся хотя бы одной строки кода. Это самая главная причина, по которой исчезают выдуманные пути к файлам и несуществующие методы: AI сверяется с Contract, а не гадает.

Contracts не устаревают: после каждого слияния шаг Docs Pipeline автоматически заново сканирует изменение и обновляет все затронутые Contracts.

Опасные зоны

Каждый Contract может содержать опасную зону — предупреждение простым языком о радиусе влияния при изменении этого кода (например, "никогда не вызывать без предварительной проверки флага skip"). AI читает опасные зоны заранее, поэтому знает, что НЕ следует ломать, ещё до начала правки, а не после падения теста.

Knowledge graph

За одной точкой доступа GraphQL находятся десять взаимосвязанных источников достоверных сведений о проекте:

  • Дерево переменных (коды бизнес-логики BL.*, коды интерфейса UI.*)
  • Behavioral Contracts
  • Карта элементов DOM
  • Hint Dictionary
  • Индекс документации
  • Карта кода — импорты/экспорты, сильно связанные "god nodes" и сообщества модулей
  • Карта тестов — элемент UI и локатор Playwright
  • Скриншоты
  • Ошибки (bugs)
  • Межмодульные связи, объединяющие все перечисленные источники

Один запрос может извлечь связанный контекст сразу из всех десяти источников, вместо того чтобы AI вслепую искал по всему репозиторию.

Onboarding проекта

При первом импорте проекта AITM выполняет детерминированное статическое предварительное сканирование, прежде чем к нему прикоснётся какой-либо AI: определение языка и стека, полная карта кода, извлечение DOM через атрибуты data-aitm, заполнение переменных и указатели на документацию. И только после этого AITM при необходимости запускает AI-проходы — обнаружение архитектуры, анализ истории git для выявления связанности модулей и глубокий проход по каждому модулю. Коротко: репозиторий импортируется, и AITM составляет его карту до запуска первого Task.

Карта DOM и Dev Panel

Реальные элементы UI приложения помечаются атрибутами data-aitm, и у каждого есть рёбра эффектов «запускает» и «запускается», а также карта прямоугольников в пикселях, показывающая, где элемент находится на экране. Именно эта карта питает надёжные самовосстанавливающиеся селекторы тестов E2E вместо хрупких локаторов CSS.

Что делает Dev Panel

Dev Panel — это автономная внедряемая панель инструментов на JS (aitm-dev-panel.js), которую может загрузить на время разработки любой проект под управлением AITM. Это плавающая закрепляемая панель, накладывающая бейдж на каждый элемент запущенного приложения с тегом data-aitm: всплывающая подсказка при наведении показывает код элемента, тег, действие и обработчик, постоянно работает счётчик событий, небольшое поле Chat/Brainstorm позволяет писать экземпляру AITM прямо из запущенного приложения, а также есть управление размером шрифта и индикатор состояния онлайн/офлайн самого AITM. Панель отслеживает реальные действия пользователя (click/change/input/mount/unmount) по мере их возникновения и отправляет их в AITM каждые 2 секунды — так AITM поддерживает актуальность своей карты UI.

В панели четыре вкладки: Elements (элементы, по которым щёлкнули или которые закрепили, с кодом переменной, Contracts, файлами и предупреждениями об опасных зонах; кнопки Overlay, Pin / One Pin и Clear Pins), Records (записанные элементы UI), Errors (перехваченные ошибки JavaScript и консоли, которые можно превратить в Task для исправления ошибок в AITM) и Settings. Её полная документация открывается в AITM из меню заголовка: Help → AITM Dev Panel.

Если AITM работает на другой машине, чем этот веб-сайт, в конфигурации нужно задать AitmServer:PublicBaseUrl (например, http://192.168.1.50:3333) — адрес, с которого браузер загружает aitm-dev-panel.js. Пустое значение означает http://<page host>:<Port>. Адрес AITM можно изменить и позже на вкладке Settings панели.

AITM Dev Panel
AITM Dev Panel, внедрённая в запущенное приложение.

Guide & Flow — поток бизнес-логики элемента

Из строки элемента в Dev Panel открываются его детали с вкладками Graph, Guide & Flow и App Flow. Guide & Flow объясняет выбранный элемент сверху вниз простыми шагами — сам элемент UI, а затем бизнес-Contracts, описывающие его поведение (каждый с затрагиваемыми им переменными). Copy as Markdown копирует всё объяснение в буфер обмена, готовое для вставки в промпт Task. Подробнее в Contract Explorer & App Flow.

Guide & Flow — поток бизнес-логики
Guide & Flow: элемент UI и бизнес-Contracts, описывающие его поведение.

Включение и отключение для проекта

Это один условный тег <script>, добавляемый в общую HTML-оболочку проекта и показываемый только вне Production, с атрибутом data-project="<your-project-id>", чтобы панель автоматически нацеливалась на нужный проект.

Blazor Server (.NET 8+)

В App.razor внедряется IWebHostEnvironment, а тег script защищается условием IsProduction():

@inject IWebHostEnvironment env

@if (!env.IsProduction())
{
    <script src="http://localhost:3333/aitm-dev-panel.js" data-project="your-project-id"></script>
}

ASP.NET Core Razor Pages

Тот же шаблон — @inject IWebHostEnvironment env плюс то же условие IsProduction() — размещается в общем _Layout.cshtml с тем же блоком кода, что и выше.

Node / Express / TypeScript

Защита выполняется через process.env.NODE_ENV в шаблоне, который формирует HTML-оболочку:

{process.env.NODE_ENV !== 'production' &&
  '<script src="http://localhost:3333/aitm-dev-panel.js" data-project="your-project-id"></script>'}

Чтобы отключить панель, достаточно удалить условный тег script или просто запустить приложение в Production — условие скроет её автоматически, не требуя изменения тега.

Советы

  • Если кажется, что AI "уже знает" файл, который он в этой сессии не открывал, это работает запрос к Contracts, а не удачная догадка.
  • Опасную зону Contract стоит прочитать, даже когда код меняется вручную — это часто самый быстрый способ заметить скрытую зависимость.
  • Повторный импорт проекта после крупного рефакторинга позволяет предварительному сканированию при onboarding догнать новую структуру.