Skip to main content
Glama

AutoLinker は易语言の AI Agent サポートライブラリです。リバースエンジニアリングにより、AI がコードを全自動で作成します。要件に応じて関連コードを自動的に検索・読み取り、直接編集・修正・挿入します。

また、ローカル MCP サービスを提供し、易语言 IDE を Codex、Claude Code、Gemini CLI などのツールに接続して、それらに易语言での全自動コーディングを実行させることができます(下記の MCP 説明を参照)。

📖 易语言 × AI Agent 実践ホワイトペーパー · 📖 e-packager:.e を txt に分解して修正後に再パッケージ

クイックスタート

Release をダウンロードしたら、AutoLinker.fne を易语言の lib ディレクトリに配置し、このサポートライブラリを有効にします。

🔧 AI / MCP 機能設定ガイド(API Key、中継サーバー、各プラットフォーム設定)

📊 モデルを選択する前に、易语言大規模言語モデルベンチマークスコア を確認して、実際の応答とヘッドレスコンパイルの成績を比較できます。

Related MCP server: 易语言 Universal MCP

コア機能

⭐ 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 を自分で参照しておく必要があり、ペアとなる 2 つの 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 はありません。外部からの呼び出しでは承認ダイアログは表示されませんが、ツールのホワイトリスト、パラメータースキーマ、ワークスペースの更新、ソースコードハッシュの CAS 検証は引き続き実行されます。ネイティブクライアントは、各セッションで最初に refresh_workspace_mirror を 1 回成功させる必要があります。固定 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 は易语言のネイティブウィンドウ UI ファイルであり、読み取りと検索専用です。現在のツールでは、ウィンドウやコントロールの位置、サイズ、階層、プロパティの調整、コントロールの追加・削除、コントロールのイベントバインディングの新規追加・削除・変更はサポートされていません。対応する 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

IDE の実ページからページングビューと code_hash を返します(書き込み前のベースライン)

編集

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

実行中の AutoLinker IDE インスタンスと現在のセッション選択を一覧表示

ルーティング

select_instance

現在の MCP セッションを指定のインスタンスにルーティング

コンパイル

compile_with_output_path

target はデフォルトで auto。成果物のフィンガープリントで成功を検証

インタラクション

run_powershell_command

確認後に PowerShell を実行。タイムアウト時はプロセスツリーを終了

ネットワーク

search_web_tavily

Web を検索

ネットワーク

fetch_url

パブリック HTTP(S) のテキストを取得し、ループバック / プライベートネットワーク / リダイレクトをブロック

ネットワーク

extract_web_document

Web ページの本文と絶対リンクの要約を抽出

その他の機能

⭐ ヘッドレスコマンドラインコンパイル

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 にのみ適用されます。--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;
}
  1. IDE の「ツール」メニューから AutoLinker コアライブラリ関数書き換え設定 を開き、強制的にリンクする .lib のリストを管理します:

    • Lib パス:追加でリンクする .lib(krnln_static.lib より前に配置して同名シンボルを上書き)

    • リンカー一致:空欄の場合はすべてのリンカーに有効。テキストを入力すると、選択したリンカー名がそのテキストを含む場合にのみ有効(例:vc2022+pf)

    • 有効化スイッチ:特定のルールを一時的に無効化できます

  2. 保存後に静的コンパイルを行うと有効になります。LNK4006 / LNK4088 などの警告が出ますが、実行には影響しません。

注意事項

  • この方法ではリンカーの /FORCE が自動的に有効になり、競合が無視されます。

  • 自身の Lib では /GL を無効にする必要があります。無効にしないと、2 回目のリンク時に AutoLinker が調整した Lib の順序が無視されます。

  • サンプルの TestCore は C++20 を使用しているため、VC2022 リンカーが必要です。設定ページは WebView2 ベースのため、ランタイムがインストールされていることを確認してください。

⭐ マウス戻るボタンで前回の変更に戻る

他の IDE ではよくある機能ですが、個人的な好みです。

Related MCP Connectors

Related MCP Servers