AutoLinker:让易语言 IDE 接上 AI Agent 和本地 MCP 实现自动编程

文章目录(快捷跳转)

简介说明

AutoLinker 是易语言的 AI Agent 支持库。它的做法有点逆向:不是让 AI 写一段代码给你粘贴,而是让 AI 直接进到 IDE 里干活,根据需求自动查找、读取相关代码,然后编辑、修改、插入。

它还提供本地 MCP 服务,可以把易语言 IDE 接入 Codex、Claude Code、Gemini CLI 这类工具,让它们调用易语言完成全自动编码,细节见下文的 MCP 说明。

📖 易语言 × AI Agent 实践白皮书 · 📖 e-packager:拆解 .e 为 txt 修改后再打包

快速开始

下载 Release 后,把 AutoLinker.fne 放进易语言 lib 目录,并启用该支持库即可。

🔧 AI / MCP 功能配置指南(API Key、中转站、各平台配置)

📊 选模型前可以先看易语言大模型基准评分,对比真实回包与无头编译成绩。

核心功能

AI Agent 会话页签:告诉 AI 你要做什么,它会自动搜索、读取、编辑当前工程源码。

右键菜单里还有一组 AI 功能:

  • AI 优化函数:对当前函数做等价优化
  • AI 添加注释:为当前函数生成注释
  • AI 翻译函数 + 变量名:重命名为英文 lowerCamelCase
  • AI 翻译选中文本
  • AI 按当前页类型添加代码:依据当前页类型、上下文和你的需求生成新增代码

项目规范文件 {文件名}.AGENTS.md:在 .e 源文件同目录下创建同名 .AGENTS.md,内容会自动注入所有 AI 功能的系统提示词,作为项目规范(类似 Claude Code 的 CLAUDE.md、Codex 的 AGENTS.md)。

源文件 规范文件(同目录)
test_a.e test_a.AGENTS.md
MyProject.e MyProject.AGENTS.md

不同 .e 源文件使用不同链接器:这下不用手动来回切了。在【工具菜单 → AutoLinker 设置 → 链接器】里添加多组 link.ini 配置,再到【主菜单 → 编译】下切换当前源文件所用的链接器。

调试 / 编译时动静态 ec 模块自动切换:为同一个模块准备一对 ec 文件(动态版 / 静态版),AutoLinker 会在开始调试和开始编译时自动替换工程里已导入的对应模块。典型场景是 VMP SDK、ExDui,编译需要 Lib 声明的静态版,调试只能用 Dll 声明的动态版。

规则在 IDE「工具」菜单的 AutoLinker EC 模块自动切换设置里维护。注意两点:要先自行引用动/静任一 ec;成对的两个 ec 必须放在同一文件夹,替换时只改文件名。

项目级按配置编译:在“工具菜单 → AutoLinker 设置 → 编译配置”中为当前 .e/.ec 工程维护多套输出配置,支持 auto、窗口 EXE、控制台 EXE、DLL、易模块目标、静态编译,以及编译前/后 PowerShell 动作。保存后从“主菜单 → 编译 → 按配置编译”选择配置;任务会生成当前 IDE 工程快照,在独立隐藏的 e.exe 实例中异步执行。配置保存在源文件旁的 <文件名>.autolinker.json,详细字段和变量见 docs/project-build-menu-integration.md。

本地 MCP 服务

把易语言 MCP 接入 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。外部调用不弹审批窗,但仍执行工具白名单、参数 Schema、工作区刷新与源码哈希 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。
  • 删除普通程序集或类使用 delete_file:先调用 read_real_file,再传入 file_path 和返回的 code_hash 作为 expected_base_hash。删除包含其成员与全部子程序,不自动改写其他页面的引用,也不自动保存工程;窗口绑定程序集、窗口 XML、固定表和导入模块文件不支持此入口。成功返回 deleted=true、verified=true 和 workspace_mirror_refreshed=true;若已删除但镜像刷新失败,应先刷新镜像,不要直接重试删除。
  • src/*.xml 为易语言原生窗口界面文件,仅供读取搜索。当前工具不支持调整窗口或控件的位置、大小、层级和属性,不支持添加、删除控件,也不支持新增、删除或修改控件事件绑定。对应 src/*.txt 中的窗口程序集代码和已有事件处理代码仍可编辑,但新增事件子程序不代表已经建立控件事件绑定。固定表(常量、全局变量、DLL 声明、数据类型)可经对应路径编辑,程序集变量写回会按 IDE 可接受格式处理。
  • 模块管理工具仅在用户明确要求列出、导入或移除模块时调用,不用于自动探索或推测依赖。移除工程引用使用 remove_module_from_project,不要使用 delete_file。
  • 同时打开多个 IDE 时,先调用 list_instances 查看目标工程,再用 select_instance 选择实例;选择按 Mcp-Session-Id 隔离,实例退出后不会静默切换。

公开工具(tools/list):当前代码对外公开 26 个工具(含两个实例路由工具),连接后的实际清单以 tools/list 为准。下表只列外部 MCP 工具,内置 AI 的计划、技能读取、通用命令执行等工具不对外开放。

类别 方法 说明
读取 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 从 IDE 真实页返回分页视图与 code_hash(写前基线)
编辑 edit_file / multi_edit_file 精确文本替换(单个 / 批量),外部调用须带 expected_base_hash
编辑 write_file 以 full_code 完整覆盖真实页,外部调用须带 expected_base_hash
编辑 diff_file 基于真实页预览结构化差异,不写回;外部调用须带 expected_base_hash
编辑 restore_file_snapshot 恢复最近一次或指定 snapshot_id 的真实页快照,外部调用须带 expected_current_hash
编辑 add_new_file 新建程序集或类,可直接写入完整源码并刷新镜像
编辑 delete_file 删除普通程序集或类及其全部子程序,须带 expected_base_hash;验证删除并刷新镜像,不自动保存工程
模块 list_imported_modules 按用户明确要求列出当前工程已导入的 .ec 模块
模块 add_module_to_project 按 module_path 或 module_name 导入指定模块,实际导入须设置 allow_blocking_import=true
模块 remove_module_from_project 按 module_index、module_path 或 module_name 移除工程中指定的模块引用
当前页 get_current_page_info 当前页名称、类型与解析来源
当前页 get_current_eide_info 源码路径、IDE 进程路径、MCP 端口等
路由 list_instances 列出运行中的 AutoLinker IDE 实例和当前会话选择
路由 select_instance 将当前 MCP 会话路由到指定实例
编译 compile_with_output_path 编译到指定 output_path;支持易语言原生 / 黑月编译,target 默认 auto,以更新后的产物和配置恢复结果验证成功
联网 search_web_tavily 联网搜索网页
联网 fetch_url 抓取公网 HTTP(S) 文本,拦截回环 / 私网 / 重定向
联网 extract_web_document 提取网页正文与绝对链接摘要

其他功能

无头命令行编译:黑月编译使用 --blackmoon asm|cxx|vcxx,不要同时传 --static。直接调用 compile_with_output_path 时必须显式设置 compiler="blackmoon",完全省略 static_compile,目标仅允许 auto 或当前 EXE/DLL 工程类型。普通编译省略 blackmoon_mode;参数冲突会返回 error 和可操作的 hint,不会隐式切换编译器。配置在跨进程锁保护下临时切换,编译结果收集后恢复。详细说明及回归方法见 黑月编译验证。

推荐用 AutoLinkerTest headless-compile 启动 e.exe:自动关闭启动期弹窗、隐藏 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。需要黑月编译时增加 --blackmoon asm|cxx|vcxx(分别对应汇编、C/C++、VC++ 模式),启动器会在 IDE 进程内确认 BlackMoon.fne 已加载且配置可用,不可用时直接返回错误。省略 --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 中确定正确的函数签名(核心库函数大多在 krnln_static.lib 的 LibFn.obj),可参考黑月核心库开源实现。
  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,否则二次链接会忽略 AutoLinker 调整的 Lib 顺序。
  • 示例 TestCore 使用 C++20,须用 VC2022 链接器;设置页基于 WebView2,请确保已安装运行时。

鼠标后退键回退到上个修改:其他 IDE 常见的功能,这里算个人喜好。
图片预览

AutoLinker AI设置AutoLinker MCP服务器设置AutoLinker MCP服务器设置2AutoLinker SKILL管理AutoLinker AI对话框配色设置AutoLinker 核心库函数重写设置AutoLinker IDE增强设置关于AutoLinker

下载地址

https://github.com/aiqinxuancai/AutoLinker

https://pan.baidu.com/s/1LMUNjkN8afbUlh3Yq9lm1Q?pwd=rief 提取码: rief

https://pan.quark.cn/s/ba98cba210ef

未经允许不得转载:网站源码、软件资源与技术教程分享 - 今夕资源网 » AutoLinker:让易语言 IDE 接上 AI Agent 和本地 MCP 实现自动编程
扫码在手机上阅读本页
赞(0)

评论抢沙发

评论前必须登录!