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: ACE-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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEmpower any MCP-compatible AI Agent(MCP Client) with engineering-grade capabilities to understand, modify, run, and deliver real-world code repositories.941Apache 2.0
- 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.2Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables LLM-powered code analysis, generation, debugging, and context management through MCP integration with IDEs like Cursor and Claude Desktop.
- AlicenseNot gradedqualityAmaintenanceEnables compatible MCP AI tools to read, write, design windows, and run programs in the E-Language IDE.MIT
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/giaosang8888-cmd/AutoLinker-5.1.2-Local'
If you have feedback or need assistance with the MCP directory API, please join our Discord server