Skip to main content
Glama

AutoLinker ist eine KI-Agent-Unterstützungsbibliothek für die E-Sprache. Durch Reverse Engineering lässt es die KI vollautomatisch Code schreiben: Es findet und liest automatisch relevanten Code entsprechend deinen Anforderungen und bearbeitet, ändert und fügt direkt ein.

Außerdem wird ein lokaler MCP-Dienst bereitgestellt, mit dem sich die E-Sprache-IDE in Tools wie Codex, Claude Code, Gemini CLI einbinden lässt, damit diese die E-Sprache vollautomatisch codieren können (siehe MCP-Erläuterung unten).

📖 E-Sprache × KI-Agent-Praxis-Whitepaper · 📖 e-packager: .e in txt zerlegen, bearbeiten und wieder packen

Schnellstart

Lade das Release herunter und lege AutoLinker.fne in das lib-Verzeichnis der E-Sprache und aktiviere diese Unterstützungsbibliothek.

🔧 KI-/MCP-Funktionskonfigurationsanleitung (API-Key, Relay-Server, Konfigurationen für verschiedene Plattformen)

📊 Vor der Modellauswahl kannst du dir die E-Sprache-LLM-Benchmark-Bewertung ansehen und echte Antwortpakete mit Headless-Kompilierungsergebnissen vergleichen.

Related MCP server: 易语言 Universal MCP

Kernfunktionen

⭐ KI-Agenten-Sitzungsreiter

Sag der KI, was du tun möchtest; sie durchsucht, liest und bearbeitet automatisch den Quellcode des aktuellen Projekts.

⭐ KI-Funktionen im Kontextmenü

  • KI-Funktion optimieren — optimiert die aktuelle Funktion äquivalent

  • KI-Kommentare hinzufügen — erzeugt Kommentare für die aktuelle Funktion

  • KI-Funktion + Variablennamen übersetzen — benennt in englische lowerCamelCase um

  • KI-Auswahltext übersetzen

  • KI-Code nach aktuellem Seitentyp hinzufügen — erzeugt neuen Code basierend auf Seitentyp, Kontext und deinen Anforderungen

⭐ Projektstandarddatei {Dateiname}.AGENTS.md

Erstelle im selben Verzeichnis wie die .e-Quelldatei eine gleichnamige .AGENTS.md. Deren Inhalt wird automatisch als Projektstandard in die System-Prompts aller KI-Funktionen eingefügt (ähnlich wie CLAUDE.md bei Claude Code und AGENTS.md bei Codex).

Quelldatei

Standarddatei (gleiches Verzeichnis)

test_a.e

test_a.AGENTS.md

MyProject.e

MyProject.AGENTS.md

⭐ Verschiedene .e-Quelldateien verwenden verschiedene Linker

Kein manuelles Umschalten zwischen Linkern mehr. Füge unter [Werkzeugmenü → AutoLinker-Einstellungen → Linker] mehrere Gruppen von link.ini-Konfigurationen hinzu und wechsle unter [Hauptmenü → Kompilieren] den Linker für die aktuelle Quelldatei.

⭐ Automatischer Wechsel zwischen dynamischen/statischen ec-Modulen beim Debuggen/Kompilieren

Bereite für dasselbe Modul ein Paar ec-Dateien vor (dynamische/statische Version). AutoLinker ersetzt das im Projekt importierte entsprechende Modul automatisch beim Start des Debuggens und beim Start der Kompilierung. Typische Szenarien sind VMP SDK, ExDui: Für die Kompilierung wird die statische Version mit Lib-Deklaration benötigt, für das Debuggen ist nur die dynamische Version mit Dll-Deklaration verwendbar.

Öffne im Menü „Werkzeuge" der IDE die AutoLinker-Einstellungen für den automatischen ec-Modulwechsel, um Regeln zu pflegen. Hinweis: Du musst zuerst selbst eine dynamische oder statische ec referenzieren, und die beiden gepaarten ec-Dateien müssen im selben Ordner liegen (beim Ersetzen wird nur der Dateiname geändert).

⭐ Projektbezogene Kompilierung nach Konfiguration

Verwalte unter „Werkzeugmenü → AutoLinker-Einstellungen → Kompilierungskonfiguration" mehrere Ausgabekonfigurationen für das aktuelle .e/.ec-Projekt. Unterstützt werden auto, Fenster-EXE, Konsolen-EXE, DLL, E-Modul-Ziel, statische Kompilierung sowie PowerShell-Aktionen vor/nach der Kompilierung. Nach dem Speichern wähle die Konfiguration unter „Hauptmenü → Kompilieren → Nach Konfiguration kompilieren". Die Aufgabe erzeugt einen Snapshot des aktuellen IDE-Projekts und führt ihn asynchron in einer separaten, versteckten e.exe-Instanz aus. Die Konfiguration wird in <Dateiname>.autolinker.json neben der Quelldatei gespeichert; ausführliche Felder und Variablen finden sich in docs/project-build-menu-integration.md.

Lokaler MCP-Dienst

Um die E-Sprache-MCP in Tools wie Codex, Claude Code, Gemini CLI einzubinden, muss der Client MCP Streamable HTTP unterstützen.

Dienstadresse

  • Externe Clients verbinden sich fest mit http://127.0.0.1:19207/mcp; die IDE-Instanzen verwenden interne Backend-Ports ab 19208, das Gateway wird von der aktiven Instanz übernommen.

  • Nach erfolgreichem Start werden im IDE-Ausgabefenster und in autolinker.log protokolliert:

    [AutoLinker][LocalMCP] 本地 MCP 服务已启动:http://127.0.0.1:19207/mcp

Protokoll

  • JSON-RPC 2.0, initialize verhandelt 2025-11-25 / 2025-03-26 / 2024-11-05 (bei unbekannter Version Rückfall auf 2025-11-25).

  • Unterstützte Methoden: initialize, notifications/initialized, ping, tools/list, tools/call, DELETE /mcp.

  • Sicherheitsgrenzen: Nur an 127.0.0.1 gebunden; Browseranfragen mit nicht leerem Origin werden abgelehnt; kein CORS / Bearer-Token. Externe Aufrufe zeigen kein Genehmigungsfenster, führen aber weiterhin Tool-Whitelist, Parameter-Schema, Workspace-Refresh und CAS-Validierung mit Quellcode-Hash aus. Native Clients müssen pro Sitzung zuerst einmal erfolgreich refresh_workspace_mirror aufrufen. Es gibt fest 4 Arbeitsthreads, maximal 32 Verbindungen in der Warteschlange; bei Überlast wird HTTP 503 zurückgegeben.

Client-Konfigurationsbeispiele

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 — Auf der MCP-Einstellungsseite hinzufügen: Name AutoLinker, Typ http / streamable_http, URL http://127.0.0.1:19207/mcp.

Lese-/Schreibmodell für Projektquellcode

  • Die integrierte KI bereitet vor jeder Anfrage automatisch ein Mirror im full-Modus vor; externe MCP-Sitzungen müssen vor dem ersten Lesen/Schreiben refresh_workspace_mirror aufrufen. Das Mirror wird von e-packager nach %TEMP%/AutoLinker/workspace-mirror/ entpackt (einschließlich ungespeicherter Änderungen), ohne das Quellverzeichnis zu verschmutzen. mode unterstützt auto / main_only / full.

  • e_packager wird nur aufgerufen, wenn der Benutzer ausdrücklich verlangt, externe .e / .ec-Dateien zu analysieren, anzusehen, zu referenzieren oder zu replizieren, und die aktuelle MCP-Sitzung muss zuerst erfolgreich refresh_workspace_mirror aufgerufen haben. Der Parameter file_path ist Pflicht (absoluter Pfad oder Pfad relativ zum aktuellen Projektverzeichnis; nur vorhandene normale .e / .ec-Dateien werden akzeptiert). Die Datei wird in das schreibgeschützte Verzeichnis unimported_code/{Dateiname}/ des aktuellen Mirrors entpackt. Verwende list_files / search_code, um Dateien zu lokalisieren, und lies sie dann mit read_file / read_files; verwende read_code_item nicht für nicht referenzierten Quellcode und ändere ihn auch nicht mit Schreibwerkzeugen. Ein gleichnamiges Verzeichnis wird nur nach erfolgreichem Entpacken ersetzt; bei Erfolg werden operation="unpack", output_directory, file_count, die neue mirror_generation und read_hint zurückgegeben. Das Entpacken ändert die Mirror-Generation; beim weiteren Lesen muss wieder auf Seite 1 begonnen werden.

  • Das Lesen läuft einheitlich über relative Mirror-Pfade (list_files, search_code, read_file, read_files, read_code_item); bei großen Dateien wird next_source_byte_offset für das fortgesetzte Lesen zurückgegeben. Bei Folgeseiten wird empfohlen, die nicht null mirror_generation der vorherigen Seite unverändert mitzusenden; wird sie weggelassen, wird automatisch die aktuelle Mirror-Generation gebunden, aber explizit übergebene Cursor mit alter Generation werden weiterhin abgelehnt.

  • Vor dem Bearbeiten werden mit read_real_file die Seitenansicht und code_hash als CAS-Baseline geholt. Schreibwerkzeuge (edit_file, multi_edit_file, write_file usw.) nehmen file_path als Ziel, werden auf IDE-Programmelemente abgebildet und direkt in die IDE zurückgeschrieben, ohne eine Paket-Kompilierung durchzuführen.

  • Schreibvorgänge müssen SHA-256 expected_base_hash (bei Wiederherstellung expected_current_hash) enthalten, um zu verhindern, dass eine alte Baseline neue Änderungen überschreibt; das Ergebnis enthält nur Hash, Snapshot, Validierung und Änderungsstatistik, das vollständige Ergebnis liegt in structuredContent.

  • src/*.xml sind native Fensteroberflächendateien der E-Sprache und dienen nur zum Lesen und Suchen. Die aktuellen Werkzeuge unterstützen weder das Ändern von Position, Größe, Ebene und Eigenschaften von Fenstern oder Steuerelementen noch das Hinzufügen/Entfernen von Steuerelementen oder das Hinzufügen, Entfernen oder Ändern von Steuerelement-Ereignisbindungen. Der zugehörige Fenster-Assemblycode und vorhandener Ereignisbehandlungscode in src/*.txt bleibt bearbeitbar, aber das Hinzufügen eines neuen Ereignis-Unterprogramms bedeutet nicht, dass eine Steuerelement-Ereignisbindung hergestellt wurde. Feste Tabellen (Konstanten, globale Variablen, DLL-Deklarationen, Datentypen) können über die entsprechenden Pfade bearbeitet werden; das Zurückschreiben von Assembly-Variablen wird in IDE-akzeptablem Format verarbeitet.

  • Wenn mehrere IDE gleichzeitig geöffnet sind, rufe zuerst list_instances auf, um das Zielprojekt zu sehen, und wähle dann die Instanz mit select_instance; die Auswahl wird durch Mcp-Session-Id isoliert, und es findet kein stiller Wechsel statt, wenn die Instanz beendet wird.

Öffentliche Werkzeuge (tools/list)

Kategorie

Methode

Beschreibung

Lesen

refresh_workspace_mirror

Aktualisiert das Mirror aus dem IDE-Projekt im Speicher (auto / main_only / full)

Lesen

e_packager

Entpackt andere .e / .ec in das schreibgeschützte Referenzverzeichnis unimported_code/{Dateiname}/ des aktualisierten Mirrors, gibt neue mirror_generation zurück

Lesen

list_files

Listet Dateien im Mirror per glob auf

Lesen

search_code

Durchsucht den Mirror dateiweise; unterstützt mehrere Patterns, glob, Kontext, Pagination

Lesen

read_file / read_files

Liest einzelne / mehrere Dateien oder Bereiche, mit Zeilennummern

Lesen

read_code_item

Liest vollständige Unterprogramme / Deklarationsblöcke nach Namen des Top-Level-Codeelements

Lesen

read_real_file

Gibt Seitenansicht und code_hash aus der echten IDE-Seite zurück (Baseline vor dem Schreiben)

Bearbeiten

edit_file / multi_edit_file

Exakter Textersatz (einzeln / in Batches)

Bearbeiten

write_file

Überschreibt die echte Seite vollständig mit Quellcode, unterstützt expected_base_hash

Bearbeiten

diff_file

Vorschau der strukturierten Unterschiede, ohne zurückzuschreiben

Bearbeiten

restore_file_snapshot

Stellt den Snapshot vor dem Schreiben wieder her

Aktuelle Seite

get_current_page_info

Name, Typ und Parsing-Quelle der aktuellen Seite

Aktuelle Seite

get_current_eide_info

Quellcode-Pfad, IDE-Prozesspfad, MCP-Port usw.

Routing

list_instances

Listet laufende AutoLinker-IDE-Instanzen und die Auswahl der aktuellen Sitzung auf

Routing

select_instance

Leitet die aktuelle MCP-Sitzung an die angegebene Instanz

Kompilierung

compile_with_output_path

target ist standardmäßig auto, Erfolg wird über den Artefakt-Fingerabdruck verifiziert

Interaktion

run_powershell_command

Führt PowerShell nach Bestätigung aus, beendet den Prozessbaum bei Zeitüberschreitung

Netzwerk

search_web_tavily

Durchsucht das Web

Netzwerk

fetch_url

Ruft öffentlichen HTTP(S)-Text ab, blockiert Loopback / private Netze / Weiterleitungen

Netzwerk

extract_web_document

Extrahiert Haupttext und absolute Link-Übersicht von Webseiten

Weitere Funktionen

⭐ Headless-Kommandozeilen-Kompilierung

Es wird empfohlen, e.exe mit AutoLinkerTest headless-compile zu starten: Es schließt automatisch Startdialoge, versteckt die IDE, ruft compile_with_output_path auf und gibt die Ergebnis-JSON auf der Konsole aus. Dieser Starter unterstützt gleichzeitige Aufrufe durch mehrere Prozesse: Dasselbe .e-Projekt wird in Aufrufreihenfolge in eine Warteschlange gestellt, verschiedene Projekte können parallel kompiliert werden; die Ausgabepfade müssen weiterhin vom Aufrufer selbst eindeutig gehalten werden.

.\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 unterstützt auto, win_exe, win_console_exe, win_dll, ecom; --static gilt nur für EXE/DLL. Wenn --result weggelassen wird, erzeugt jeder Aufruf eine separate <输出文件>.headless.<invocation-id>.json und aktualisiert atomar die kompatible Datei <输出文件>.headless.json. {易语言目录}\AutoLinker\Log\headless_compile_last.json wird ebenfalls atomar als „letztes Ergebnis" aktualisiert; gleichzeitige Aufrufer sollten sich nicht darauf verlassen, um ihre Ergebnisse zu unterscheiden. Wenn --result explizit angegeben wird, sollten gleichzeitige Aufrufer jeweils unterschiedliche Pfade verwenden.

Das Hauptprogramm kann auch direkt gestartet werden (es ist nur für die Headless-Kompilierung zuständig; für frühe Dialoge und die Koordinierung paralleler Starts desselben Projekts wird weiterhin der Starter empfohlen):

"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"

⭐ Kernbibliotheksfunktionen neu schreiben

Durch das Ersetzen von Kernbibliotheksfunktionen durch modernes C++ lässt sich die Leistung erheblich steigern; es bietet zudem Schutz vor Merkmals-Cracking von e-Funktionen und AV-Bypass und gilt auch für Drittanbieter-Bibliotheken.

Verwendung

  1. Ermittle in IDA die korrekte 函数签名 (die meisten Kernbibliotheksfunktionen liegen in LibFn.obj von krnln_static.lib); eine Referenz ist die Open-Source-Implementierung der BlackMoon-Kernbibliothek.

  2. Implementiere die Funktionen in deiner eigenen Lib (siehe Projekt TestCore) und kompiliere sie im Release-Modus als 32-Bit-Lib. Beispiel:

    // 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. Öffne im Menü „Werkzeuge" der IDE die AutoLinker-Einstellungen zum Neuschreiben von Kernbibliotheksfunktionen, um die Liste der zwangsweise zu verlinkenden .lib-Dateien zu pflegen:

    • Lib-Pfad: Die zusätzlich zu verlinkende .lib (vor krnln_static.lib eingefügt, um gleichnamige Symbole zu überschreiben)

    • Linker-Match: Wenn leer, gilt für alle Linker; wenn Text eingetragen, greift es nur, wenn der Name des gewählten Linkers diesen Text enthält (z. B. vc2022+pf)

    • Aktivierungsschalter: Eine Regel kann vorübergehend deaktiviert werden

  4. Nach dem Speichern wird es bei der statischen Kompilierung wirksam; Warnungen wie LNK4006 / LNK4088 können auftreten, beeinträchtigen den Betrieb aber nicht.

Hinweis

  • Diese Methode aktiviert automatisch /FORCE des Linkers, um Konflikte zu ignorieren.

  • Die eigene Lib muss /GL deaktivieren, sonst ignoriert der zweite Link-Durchlauf die von AutoLinker angepasste Lib-Reihenfolge.

  • Das Beispiel TestCore verwendet C++20 und benötigt den VC2022-Linker; die Einstellungsseite basiert auf WebView2 – bitte stelle sicher, dass die Runtime installiert ist.

⭐ Mit der Zurück-Taste der Maus zum letzten Bearbeitungsschritt zurück

Eine in anderen IDEs übliche Funktion; persönliche Vorliebe.

Related MCP Connectors

Related MCP Servers