Method Project Map
БесплатноВерсия 0.5.1 — что нового
Посмотрите, как устроен проект, — и покажите это ИИ-агенту
Читает проект статически — на десяти языках, от Python до Rust и C++ — и рисует его устройство: пакеты, файлы, классы, функции и кто кого вызывает. Теперь и между языками: от экрана Flutter через канал платформы в Swift, Kotlin или C++ и дальше в ядро на Rust. ИИ и интернет здесь не участвуют: карта вычисляется, поэтому она всегда одинакова и обновляется вместе с кодом.
Лицензия MIT · для работы нужен Python 3.9 или новее — на каком бы языке ни был проект · macOS, Linux, Windows · интерфейс на русском и английском.
- Без ИИ и интернета
- Открытый исходный код
- Карта обновляется сама
Что нового
Версия 0.5.1 · 24 октября 2026
В 0.5.1 обновлены документация и примеры: README и руководство разбирают плагин аудиоплеера для Flutter — на Dart, Swift, Kotlin и C++. Карта работает так же, как в 0.5.0. Что появилось в 0.5.0:
- Связи между языкамиКаналы Flutter, FFI, JNI и сгенерированные привязки — вызовы, которые не проверяет ни один компилятор. И пропуски: метод, который одна из платформ не обрабатывает.
- Заметка после правкиИИ-агент сразу узнаёт, что ещё зависит от кода, который он только что изменил, — в других файлах и на других языках.
- Схема Method Diagram как проектФункциональная схема из нашего редактора сверяется с кодом так же, как
design.yaml.
Вызовы, которые не проверяет компилятор
Приложение на Flutter обращается к Swift, Kotlin и C++ по имени канала и имени метода — обычным строкам. Ядро на Rust вызывают по именам символов. Переименуйте одну сторону — приложение соберётся, а упадёт уже во время работы. Карта связывает обе стороны.
Каналы Flutter
Методы, события и сообщения:
invokeMethod('pause')в Dart доходит до веткиcase "pause":,"pause" ->илиmethod_name() == "pause"в Swift, Kotlin, Java и C++ — и обратно. Имена каналов могут лежать в константах.C ABI (FFI)
dart:ffi, Swift, C/C++ и Go (cgo) — к функциям Rust с#[no_mangle], определениям на C,@_cdeclв Swift и//exportв Go.JNI
external funиnativeв Kotlin и Java — к функциямJava_…на Rust или C.Сгенерированные привязки
Pigeon, flutter_rust_bridge, UniFFI и команды Tauri: вызов через сгенерированный API доходит до реализации в приложении.
Пропуск
Метод канала, который одна из платформ не обрабатывает. Такой вызов падает только на этой платформе — и только во время работы. pmap check . перечисляет пропуски с файлом и строкой, даже без проекта архитектуры, а pmap check --strict останавливает на них сборку в CI.
Проверено на плагинах из pub.dev. В audioplayers — Dart, Kotlin, Swift и C++ — карта нашла 73 связи между языками, все подтверждённые: каждый из 23 методов канала дошёл до своей ветки на каждой платформе. В connectivity_plus — 7 связей.
Агент узнаёт, что ещё поменять
Сразу после того как агент правит код, карта коротко сообщает ему, что от этого кода зависит в других местах: вызовы из других файлов и другую сторону каждой связи между языками. Так правка не останавливается на полпути.
- Если от изменения ничего не зависит, заметки нет, а в одной сессии она не повторяется.
- Заметка читает компактный индекс рядом с картой: 0,4 с на фреймворке Flutter из 1 700 файлов.
- Обзор проекта в начале сессии стал вдвое короче — 4 000 символов вместо 7 500 — и начинается со связей между языками.
правка lib/player.dart · AudioPlayer.pause
Method Project Map — code elsewhere depends on what you just changed; keep it in step:
AudioPlayer.pause (lib/player.dart:41)
→ android/…/AudioPlayerPlugin.kt:112 (Kotlin, channel audio/player "pause")
→ ios/Classes/AudioPlayerPlugin.swift:88 (Swift, channel audio/player "pause")
→ windows/audio_player_plugin.cpp:57 (C/C++, channel audio/player "pause")
used in 1 other file: lib/ui/controls.dart:23 Controls.onPause
pmap connect ставит заметку и обзор ИИ-агентам для программирования, которые умеют запускать команды до и после своих действий, а для остальных — навык, правило и MCP-сервер с инструментами pmap_overview, pmap_find, pmap_show, pmap_source, pmap_check, pmap_stale и pmap_scan. Каждое изменение — помеченный блок с резервной копией; отменить — pmap disconnect --all.
Агент читает почти вдвое меньше кода
Проект на 29 тысяч строк со скрытыми тестами, которых агент не видит: 6 задач на исправление ошибок × 2 режима × 5 прогонов. Показано, сколько потрачено с картой по сравнению с работой без неё.
Код, прочитанный агентом
0,55× 95 % доверительный интервал — 0,49–0,59
Выходные токены
0,85×
Входные токены в сумме
0,93× интервал 0,83–1,02: разница не значима
Исправлений, прошедших скрытые тесты, — 60 из 60 и с картой, и без неё. Обзор в начале сессии сокращал чтение кода, но стоил примерно столько же токенов, сколько экономил. Поэтому в 0.5.0 обзор стал короче, а главной стала заметка после правки; следующее испытание проверит её на задачах, проходящих через несколько языков. Отчёты — в репозитории, папка bench/reports.
Блок-схема проекта в браузере
У каждой связи есть уровень уверенности: подтверждена, возможна или не определена. Карта никогда не выдаёт догадку за факт.
design.yaml — и где код нарушает правила; pmap check --strict уронит проверку в CI.- Переключаться между проектами через Finder, Проводник или список недавних.
- Искать классы, функции и файлы по имени; смотреть код одной функции.
- Выгружать схемы в Mermaid и сохранять всю карту одной самодостаточной HTML-страницей для сайта или вики.
- Работать на русском и английском — со встроенным справочником и пошаговым обучением.
Схема — это проект для кода
Схема, которую редактор Method Diagram отдаёт кодовому агенту, служит карте проектом архитектуры. Агент дописывает у функций строку «код:» с путями к файлам, а карта сверяет связи в коде со связями на схеме.
- Файл схемы —
PROJECT.mdm, проверка —pmap check .; функции и объекты со строкойкод:становятся подсистемами. - Что соединено на схеме, то коду можно использовать; всё остальное — расхождение, с названиями функций.
- Объекты с одним и тем же
код:— один тип данных: «Заявка» и «Проверенная заявка» делят один класс. - Обзор для агента начинается со списка функций и того, где они в коде.
Десять языков, можно вперемешку
Карта следит за типами переменных: через объявления и конструкторы, через объявленные результаты функций проекта — в том числе по цепочкам вызовов — и через типы полей. В типизированных языках вызов у класса проекта — подтверждённая связь, если ни один подкласс не переопределяет метод; вызов через интерфейс, протокол или трейт — возможная.
Python
Импорты (относительные, раскладка
src/, реэкспорты), вызовы через области видимости и аннотации типов, наследование — встроено, без зависимостей.TypeScript / JavaScript
ES-модули и CommonJS, алиасы путей из
tsconfig, реэкспорты черезindex, монорепозитории, JSX-компоненты.Go
Модули
go.mod, пакеты из нескольких файлов, методы с получателем, встраивание, интерфейсы, cgo.Java / Kotlin
Пакеты, групповые и статические импорты, функции верхнего уровня Kotlin, оба языка в одном проекте, JNI.
C#
Пространства имён,
using,using static,global using, алиасы, records, инструкции верхнего уровня.Swift
Модули SwiftPM и Xcode, протоколы, расширения,
init,@_cdecl.Dart / Flutter
Импорты
package:, реэкспорты, префиксы, файлыpart, виджеты, миксины, каналы платформы иdart:ffi.Rust
Крейты и воркспейсы,
mod,use,pub use, блокиimplи трейты,?иunwrap(),#[no_mangle].C / C++
#include, пространства имён, классы, методы вне класса, заголовки сextern "C", Win32 и C++/WinRT.
Замеры на настоящем коде
Вызовы, которые карта оценивает; обращения к библиотекам не считаются. Неопределённым остаётся то, чего статический анализ действительно не видит: код из макросов, замыкания и значения функций без типов.
Фреймворк Flutter Dart, 1 712 файлов за 20 с
90 % подтверждено, 3 % возможно, 7 % не определено
net/httpGo, 157 файлов за 0,6 с73 % подтверждено, 4 % возможно, 23 % не определено
Крейт
timeRust, 164 файла за 0,3 с65 % подтверждено, 4 % возможно, 31 % не определено
Крейт
openmlsRust, 263 файла кода библиотеки за 0,5 с61 % подтверждено, 39 % не определено
Три шага
Для работы нужен Python 3.9 или новее — на каком бы языке ни был проект. Всё ставится в ~/.pmap, плюс ярлык приложения.
- 01
Скачать
Архив с этой страницы — или
git clone https://github.com/lstcrsdd/method-project-map.git - 02
Установить
В папке проекта —
./install.sh, на Windows —install.bat. Установщик сразу подключает карту к ИИ-агенту (без агентов — ключ--none) и скачивает грамматики tree-sitter для других языков, около 15 МБ (только Python — ключ--python-only). - 03
Открыть
Method Project Map — в «Программах» (macOS), меню «Пуск» (Windows) или меню приложений (Linux), либо
~/.pmap/bin/pmap ui. В первый раз карта спросит, какую папку показать, и предложит минутное обучение.
Ограничения
Проверки типов нет
Вызовы у значений, тип которых карта не видит (переменные без типа, результаты библиотечных функций), остаются неопределёнными — карта не выдаёт догадку за факт.
Связи между языками — по именам
Имя канала или символа, собранное во время работы, карта не прослеживает. Objective-C и модули React Native пока не читаются.
Сгенерированный и чужой код
Он засоряет карту — исключите его через файл
.pmapignore.Статический анализ «закрытого мира»
Карта не видит вызовов из кода вне репозитория, подмены функций на лету и обращений по имени через
getattr.
Посмотрите на свой проект
Бесплатно: версия 0.5.1, лицензия MIT. Вопросы, задачи и pull request'ы — на GitHub.