Skip to main content
Glama

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-перевод функции + имён переменных — переименовывает в английский lowerCamelCase

  • AI-перевод выделенного текста

  • AI-добавление кода по типу текущей страницы — генерирует новый код на основе типа текущей страницы, контекста и ваших требований

⭐ Файл правил проекта {文件名}.AGENTS.md

В том же каталоге, где находится .e-файл, создайте одноимённый .AGENTS.md. Его содержимое автоматически внедряется в системные подсказки всех AI-функций как правила проекта (аналог CLAUDE.md в Claude Code и AGENTS.md в Codex).

Исходный файл

Файл правил (в том же каталоге)

test_a.e

test_a.AGENTS.md

MyProject.e

MyProject.AGENTS.md

⭐ Для разных .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)

Категория

Метод

Описание

Чтение

refresh_workspace_mirror

Обновляет зеркало из проекта IDE (auto / main_only / full)

Чтение

e_packager

Распаковывает другие .e / .ec в обновлённом зеркале в доступную только для чтения справочную папку unimported_code/{文件名}/, возвращает новую mirror_generation

Чтение

list_files

Список файлов в зеркале по glob

Чтение

search_code

Поиск по каждому файлу зеркала: массовые patterns, glob, контекст, постранично

Чтение

read_file / read_files

Чтение одного / нескольких файлов или диапазонов, с номерами строк

Чтение

read_code_item

Чтение полной подпрограммы / блока объявлений по имени элемента верхнего уровня

Чтение

read_real_file

Возвращает постраничное представление и code_hash из реальной страницы IDE (базовая линия перед записью)

Редактирование

edit_file / multi_edit_file

Точная замена текста (одиночная / массовая)

Редактирование

write_file

Полная перезапись реальной страницы исходным кодом, поддерживает expected_base_hash

Редактирование

diff_file

Просмотр структурной разницы, без записи

Редактирование

restore_file_snapshot

Восстановление снимка перед записью

Текущая страница

get_current_page_info

Имя текущей страницы, тип и источник разбора

Текущая страница

get_current_eide_info

Путь к исходнику, путь к процессу IDE, MCP-порт и т. д.

Маршрутизация

list_instances

Список запущенных экземпляров IDE AutoLinker и выбор текущего сеанса

Маршрутизация

select_instance

Направляет текущий MCP-сеанс на указанный экземпляр

Компиляция

compile_with_output_path

target по умолчанию — auto, успех проверяется по отпечатку артефакта

Взаимодействие

run_powershell_command

Выполнение PowerShell после подтверждения, при таймауте завершает дерево процессов

Сеть

search_web_tavily

Поиск в интернете

Сеть

fetch_url

Загружает текст из публичного HTTP(S), блокирует loopback / частные сети / редиректы

Сеть

extract_web_document

Извлекает основной текст веб-страницы и сводку абсолютных ссылок

Другие функции

⭐ Безголовая компиляция из командной строки

Рекомендуется запускать 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 120

target поддерживает 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-функций и эффект обхода антивируса; это же применимо к сторонним библиотекам.

Как использовать

  1. Определите в IDA правильную сигнатуру функции (большинство функций базовой библиотеки находятся в LibFn.obj из krnln_static.lib); можно опираться на открытую реализацию базовой библиотеки BlackMoon.

  2. Реализуйте функцию в своей собственной 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;
    }
  3. В меню «Инструменты» IDE откройте Настройки переопределения функций базовой библиотеки AutoLinker, чтобы вести список .lib, которые нужно принудительно подключить:

    • Путь к Lib: дополнительно подключаемый при компоновке .lib (указывается перед krnln_static.lib, чтобы перекрыть одноимённые символы)

    • Совпадение линкера: если оставить пустым, действует для всех линкеров; если указать текст, правило действует только когда имя выбранного линкера содержит этот текст (например vc2022+pf)

    • Включение: позволяет временно отключить отдельное правило

  4. После сохранения статическая компиляция сразу применит изменения; появятся предупреждения LNK4006 / LNK4088 и т. п., которые не влияют на работу.

Внимание

  • Этот метод автоматически включает у линкера /FORCE, чтобы игнорировать конфликты.

  • В вашей собственной Lib нужно отключить /GL, иначе при повторной компоновке будет проигнорирован порядок Lib, скорректированный AutoLinker.

  • Пример TestCore использует C++20 и требует линкер VC2022; страница настроек основана на WebView2, убедитесь, что среда выполнения установлена.

⭐ Возврат к предыдущему изменению кнопкой мыши «назад»

Обычная функция в других IDE, личное предпочтение.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
Release cycle
0Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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