AutoLinker
AutoLinker — это библиотека поддержки AI-агентов для EPL. За счёт реверс-инжиниринга она позволяет AI полностью автоматически писать код: автоматически находить и читать нужный код по вашим требованиям, а затем напрямую редактировать, изменять и вставлять его.
Также предоставляется локальный MCP-сервис, который подключает IDE EPL к Codex, Claude Code, Gemini CLI и другим инструментам, позволяя им автоматически писать код на EPL (см. описание MCP ниже).
📖 Практическое руководство EPL × AI Agent · 📖 e-packager: разбираем .e в txt, изменяем и упаковываем обратно
Быстрый старт
Скачав Release, поместите AutoLinker.fne в каталог lib EPL и включите эту библиотеку поддержки.
🔧 Руководство по настройке функций AI / MCP (API-ключи, прокси-серверы, настройки платформ)
📊 Перед выбором модели можно ознакомиться с бенчмарк-оценкой больших языковых моделей для EPL и сравнить реальные ответы с результатами безголовой компиляции.
Related MCP server: 易语言 Universal MCP
Основные функции
⭐ Вкладка сеанса AI-агента
Расскажите AI, что нужно сделать, и он автоматически найдёт, прочитает и отредактирует исходный код текущего проекта.
⭐ AI-функции контекстного меню
AI-оптимизация функции — выполняет эквивалентную оптимизацию текущей функции
AI-добавление комментариев — генерирует комментарии для текущей функции
AI-перевод функции + имён переменных — переименовывает в английский
lowerCamelCaseAI-перевод выделенного текста
AI-добавление кода по типу текущей страницы — генерирует новый код на основе типа текущей страницы, контекста и ваших требований
⭐ Файл правил проекта {文件名}.AGENTS.md
В том же каталоге, где находится .e-файл, создайте одноимённый .AGENTS.md. Его содержимое автоматически внедряется в системные подсказки всех AI-функций как правила проекта (аналог CLAUDE.md в Claude Code и AGENTS.md в Codex).
Исходный файл | Файл правил (в том же каталоге) |
|
|
|
|
⭐ Для разных .e-файлов — разные линкеры
Больше не нужно вручную переключать линкеры. Добавьте несколько групп конфигураций link.ini в 【Меню «Инструменты» → Настройки AutoLinker → Линкеры】, а затем переключайте линкер для текущего исходного файла в 【Главное меню → Компиляция】.
⭐ Автоматическое переключение динамических/статических модулей ec при отладке / компиляции
Подготовьте пару файлов ec (динамическую / статическую версию) для одного и того же модуля. AutoLinker автоматически заменит импортированный в проект модуль при начале отладки и начале компиляции. Типичные сценарии — VMP SDK, ExDui: для компиляции нужна статическая версия с объявлениями Lib, а для отладки доступна только динамическая версия с объявлениями Dll.
В меню «Инструменты» IDE откройте Настройки автоматического переключения модулей EC AutoLinker, чтобы вести правила. Примечание: сначала нужно самостоятельно подключить любой из пары ec, а оба ec в паре должны находиться в одной папке (при замене меняется только имя файла).
⭐ Компиляция проекта по конфигурации
В разделе «Инструменты → Настройки AutoLinker → Конфигурации компиляции» можно вести несколько наборов конфигураций вывода для текущего .e/.ec проекта. Поддерживаются auto, оконный EXE, консольный EXE, DLL, целевой модуль EPL, статическая компиляция, а также действия PowerShell до/после компиляции. После сохранения выберите конфигурацию через «Главное меню → Компиляция → Компиляция по конфигурации»; задача создаёт снимок текущего проекта IDE и выполняется асинхронно в отдельном скрытом экземпляре e.exe. Конфигурация сохраняется в файле <文件名>.autolinker.json рядом с исходным файлом; подробные поля и переменные см. в docs/project-build-menu-integration.md.
Локальный MCP-сервис
Чтобы подключить MCP для EPL к Codex, Claude Code, Gemini CLI и другим инструментам, клиент должен поддерживать MCP Streamable HTTP.
Адрес сервиса
Внешние клиенты всегда подключаются к
http://127.0.0.1:19207/mcp; экземпляры IDE используют внутренние серверные порты начиная с19208, а шлюзом управляет активный экземпляр.После успешного запуска в окне вывода IDE и в
autolinker.logбудет записано:[AutoLinker][LocalMCP] 本地 MCP 服务已启动:http://127.0.0.1:19207/mcp
Протокол
JSON-RPC 2.0, вinitializeсогласуются2025-11-25/2025-03-26/2024-11-05(для неизвестных версий — откат на2025-11-25).Поддерживаемые методы:
initialize,notifications/initialized,ping,tools/list,tools/call,DELETE /mcp.Границы безопасности: привязка только к
127.0.0.1, запросы браузеров с непустымOriginотклоняются, нет CORS / Bearer Token. Внешние вызовы не показывают окно подтверждения, но по-прежнему выполняют белый список инструментов, проверку схемы параметров, обновление рабочей области и CAS-проверку хэша исходного кода. Для каждого сеанса нативного клиента нужно сначала успешно вызватьrefresh_workspace_mirror. Фиксировано 4 рабочих потока, очередь до 32 соединений, при перегрузке возвращается HTTP 503.
Примеры конфигурации клиентов
Claude Code — ~/.claude.json; Gemini CLI — ~/.gemini/settings.json
{
"mcpServers": {
"AutoLinker": {
"transport": "streamable_http",
"url": "http://127.0.0.1:19207/mcp"
}
}
}Codex — ~/.codex/config.toml
[mcp_servers.AutoLinker]
url = "http://127.0.0.1:19207/mcp"Cursor / Windsurf / IDE — на странице настроек MCP добавьте: Name — AutoLinker, Type — http / streamable_http, URL — http://127.0.0.1:19207/mcp.
Модель чтения/записи исходного кода проекта
Встроенный AI автоматически подготавливает зеркало в режиме
fullперед каждым запросом; внешний MCP-сеанс перед первым чтением/записью должен вызватьrefresh_workspace_mirror. Зеркало распаковывается e-packager в%TEMP%/AutoLinker/workspace-mirror/(включая несохранённые изменения) и не затрагивает каталог исходников.modeподдерживаетauto/main_only/full.Только когда пользователь явно просит разобрать, просмотреть, использовать как справочник или скопировать внешний
.e/.ecфайл, вызываетсяe_packager, и текущий MCP-сеанс должен сначала успешно вызватьrefresh_workspace_mirror. Аргументом является обязательныйfile_path(абсолютный путь или путь относительно текущего каталога проекта; принимаются только существующие обычные файлы.e/.ec). Файл распаковывается в доступный только для чтения каталогunimported_code/{文件名}/текущего зеркала. Используйтеlist_files/search_codeдля поиска файлов, затем читайте их черезread_file/read_files; для неимпортированных исходников не используйтеread_code_itemи не используйте инструменты записи. Каталог с тем же именем заменяется только после успешной распаковки; в случае успеха возвращаютсяoperation="unpack",output_directory,file_count, новаяmirror_generationиread_hint. Распаковка меняет поколение зеркала, поэтому постраничное чтение нужно начинать заново с первой страницы.Чтение всегда идёт по относительным путям зеркала (
list_files,search_code,read_file,read_files,read_code_item); для больших файлов возвращаетсяnext_source_byte_offsetдля продолжения чтения. При чтении следующей страницы рекомендуется без изменений передавать ненулевуюmirror_generationпредыдущей страницы; если её не передать, автоматически привязывается текущее поколение зеркала, а явно переданные устаревшие поколения по-прежнему отклоняются.Перед редактированием получите через
read_real_fileпостраничное представление иcode_hashкак базовую линию CAS. Инструменты записи (edit_file,multi_edit_file,write_fileи т. д.) нацелены наfile_path, сопоставляются с элементами программы в IDE и записываются напрямую в IDE, без компиляции и обратной отправки.При записи необходимо передавать SHA-256
expected_base_hash(для восстановления —expected_current_hash), чтобы старая базовая линия не перезаписывала новые изменения; результат возвращает только хэши, снимки, проверку и статистику изменений, полный результат — вstructuredContent.src/*.xml— это собственные файлы оконных интерфейсов EPL, они предназначены только для чтения и поиска. Текущие инструменты не поддерживают изменение положения, размера, порядка слоёв и свойств окон и элементов управления, не поддерживают добавление и удаление элементов управления, а также добавление, удаление или изменение привязок событий элементов управления. Соответствующий код оконных модулей и существующие обработчики событий вsrc/*.txtпо-прежнему можно редактировать, однако добавление подпрограммы события не означает, что привязка события элемента управления уже установлена. Фиксированные таблицы (константы, глобальные переменные, объявления DLL, типы данных) можно редактировать по соответствующим путям; переменные программных модулей при записи обратно приводятся к формату, принимаемому IDE.Если одновременно открыто несколько IDE, сначала вызовите
list_instances, чтобы просмотреть целевой проект, а затем выберите экземпляр с помощьюselect_instance; выбор изолируется поMcp-Session-Id, и после выхода экземпляра не происходит тихого переключения.
Публичные инструменты (tools/list)
Категория | Метод | Описание |
Чтение |
| Обновляет зеркало из проекта IDE ( |
Чтение |
| Распаковывает другие |
Чтение |
| Список файлов в зеркале по glob |
Чтение |
| Поиск по каждому файлу зеркала: массовые patterns, glob, контекст, постранично |
Чтение |
| Чтение одного / нескольких файлов или диапазонов, с номерами строк |
Чтение |
| Чтение полной подпрограммы / блока объявлений по имени элемента верхнего уровня |
Чтение |
| Возвращает постраничное представление и |
Редактирование |
| Точная замена текста (одиночная / массовая) |
Редактирование |
| Полная перезапись реальной страницы исходным кодом, поддерживает |
Редактирование |
| Просмотр структурной разницы, без записи |
Редактирование |
| Восстановление снимка перед записью |
Текущая страница |
| Имя текущей страницы, тип и источник разбора |
Текущая страница |
| Путь к исходнику, путь к процессу IDE, MCP-порт и т. д. |
Маршрутизация |
| Список запущенных экземпляров IDE AutoLinker и выбор текущего сеанса |
Маршрутизация |
| Направляет текущий MCP-сеанс на указанный экземпляр |
Компиляция |
|
|
Взаимодействие |
| Выполнение PowerShell после подтверждения, при таймауте завершает дерево процессов |
Сеть |
| Поиск в интернете |
Сеть |
| Загружает текст из публичного HTTP(S), блокирует loopback / частные сети / редиректы |
Сеть |
| Извлекает основной текст веб-страницы и сводку абсолютных ссылок |
Другие функции
⭐ Безголовая компиляция из командной строки
Рекомендуется запускать e.exe через AutoLinkerTest headless-compile: автоматически закрываются всплывающие окна при запуске, скрывается IDE, вызывается compile_with_output_path, а результат JSON выводится в консоль. Этот лаунчер поддерживает одновременные вызовы из нескольких процессов: задания для одного и того же .e проекта выстраиваются в очередь в порядке вызова, разные проекты могут компилироваться параллельно; выходной путь по-прежнему должен оставаться уникальным, и это должен обеспечивать вызывающий.
.\bin\fne_release\AutoLinkerTest.exe headless-compile `
"C:\path\to\e571.exe" "D:\demo\demo.e" "D:\demo\build\demo.exe" `
--target auto --static --result "D:\demo\build\compile-result.json" --timeout 120target поддерживает auto, win_exe, win_console_exe, win_dll, ecom; --static применим только к EXE/DLL. Если --result опущен, каждый вызов создаёт отдельный <输出文件>.headless.<invocation-id>.json и атомарно обновляет совместимый файл <输出文件>.headless.json. {易语言目录}\AutoLinker\Log\headless_compile_last.json также атомарно обновляется и содержит «результат последнего вызова»; конкурентные вызывающие не должны полагаться на него для различения своих результатов. При явном указании --result конкурентные вызывающие должны использовать разные пути.
Также можно запустить главную программу напрямую (она отвечает только за безголовую компиляцию; для ранних всплывающих окон и координации параллельных запусков одного проекта по-прежнему рекомендуется использовать лаунчер):
"C:\path\to\e571.exe" "D:\demo\demo.e" `
--autolinker-headless-compile `
--autolinker-output "D:\demo\build\demo.exe" `
--autolinker-target auto `
--autolinker-result "D:\demo\build\compile-result.json" `
--autolinker-invocation-id "compile-001"⭐ Переписывание функций базовой библиотеки
Замена функций базовой библиотеки современным C++ позволяет значительно повысить производительность, а также даёт защиту от взлома по сигнатурам e-функций и эффект обхода антивируса; это же применимо к сторонним библиотекам.
Как использовать
Определите в IDA правильную
сигнатуру функции(большинство функций базовой библиотеки находятся вLibFn.objизkrnln_static.lib); можно опираться на открытую реализацию базовой библиотеки BlackMoon.Реализуйте функцию в своей собственной Lib (см. проект
TestCore) и скомпилируйте Release как 32-битную lib. Пример:// C++20(需 VC2022)重写核心库「寻找文本」,约为核心库 300% 速度 extern "C" void __cdecl krnln_fnInStr(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf) { std::string_view inputString = pArgInf[0].m_pText; std::string_view searchString = pArgInf[1].m_pText; if (inputString.empty() || searchString.empty()) { pRetData->m_int = -1; return; } size_t start = (pArgInf[2].m_dtDataType == _SDT_NULL || pArgInf[2].m_int <= 1) ? 0 : pArgInf[2].m_int - 1; auto r = (pArgInf[3].m_bool) ? std::search(inputString.begin() + start, inputString.end(), searchString.begin(), searchString.end(), [](char a, char b) { return std::tolower(a) == std::tolower(b); }) : std::search(inputString.begin() + start, inputString.end(), searchString.begin(), searchString.end()); pRetData->m_int = (r != inputString.end()) ? std::distance(inputString.begin(), r) + 1 : -1; }В меню «Инструменты» IDE откройте Настройки переопределения функций базовой библиотеки AutoLinker, чтобы вести список
.lib, которые нужно принудительно подключить:Путь к Lib: дополнительно подключаемый при компоновке
.lib(указывается передkrnln_static.lib, чтобы перекрыть одноимённые символы)Совпадение линкера: если оставить пустым, действует для всех линкеров; если указать текст, правило действует только когда имя выбранного линкера содержит этот текст (например
vc2022+pf)Включение: позволяет временно отключить отдельное правило
После сохранения статическая компиляция сразу применит изменения; появятся предупреждения
LNK4006/LNK4088и т. п., которые не влияют на работу.
Внимание
Этот метод автоматически включает у линкера
/FORCE, чтобы игнорировать конфликты.В вашей собственной Lib нужно отключить
/GL, иначе при повторной компоновке будет проигнорирован порядок Lib, скорректированный AutoLinker.Пример
TestCoreиспользует C++20 и требует линкер VC2022; страница настроек основана на WebView2, убедитесь, что среда выполнения установлена.
⭐ Возврат к предыдущему изменению кнопкой мыши «назад»
Обычная функция в других IDE, личное предпочтение.
This server cannot be deployed
Maintenance
Related MCP Connectors
A full backend your AI coding agent can set up over MCP
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
List, read, edit, and deploy your GenMB AI-generated apps from any MCP client.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables compatible MCP AI tools to read, write, design windows, and run programs in the E-Language IDE.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to control local Windows development tools by exposing project files, code search, file editing, test execution, Git operations, and resource viewing through a secure MCP interface with permission controls.11Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to access unified development tools including code generation, documentation synchronization, test case rendering, and architecture graph queries through a single MCP server.-