AutoLinker
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.
📊 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
lowerCamelCaseumKI-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) |
|
|
|
|
⭐ 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 ab19208, das Gateway wird von der aktiven Instanz übernommen.Nach erfolgreichem Start werden im IDE-Ausgabefenster und in
autolinker.logprotokolliert:[AutoLinker][LocalMCP] 本地 MCP 服务已启动:http://127.0.0.1:19207/mcp
Protokoll
JSON-RPC 2.0,initializeverhandelt2025-11-25/2025-03-26/2024-11-05(bei unbekannter Version Rückfall auf2025-11-25).Unterstützte Methoden:
initialize,notifications/initialized,ping,tools/list,tools/call,DELETE /mcp.Sicherheitsgrenzen: Nur an
127.0.0.1gebunden; Browseranfragen mit nicht leeremOriginwerden 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 erfolgreichrefresh_workspace_mirroraufrufen. 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/Schreibenrefresh_workspace_mirroraufrufen. Das Mirror wird von e-packager nach%TEMP%/AutoLinker/workspace-mirror/entpackt (einschließlich ungespeicherter Änderungen), ohne das Quellverzeichnis zu verschmutzen.modeunterstütztauto/main_only/full.e_packagerwird 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 erfolgreichrefresh_workspace_mirroraufgerufen haben. Der Parameterfile_pathist Pflicht (absoluter Pfad oder Pfad relativ zum aktuellen Projektverzeichnis; nur vorhandene normale.e/.ec-Dateien werden akzeptiert). Die Datei wird in das schreibgeschützte Verzeichnisunimported_code/{Dateiname}/des aktuellen Mirrors entpackt. Verwendelist_files/search_code, um Dateien zu lokalisieren, und lies sie dann mitread_file/read_files; verwenderead_code_itemnicht für nicht referenzierten Quellcode und ändere ihn auch nicht mit Schreibwerkzeugen. Ein gleichnamiges Verzeichnis wird nur nach erfolgreichem Entpacken ersetzt; bei Erfolg werdenoperation="unpack",output_directory,file_count, die neuemirror_generationundread_hintzurü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 wirdnext_source_byte_offsetfür das fortgesetzte Lesen zurückgegeben. Bei Folgeseiten wird empfohlen, die nicht nullmirror_generationder 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_filedie Seitenansicht undcode_hashals CAS-Baseline geholt. Schreibwerkzeuge (edit_file,multi_edit_file,write_fileusw.) nehmenfile_pathals 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 Wiederherstellungexpected_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 instructuredContent.src/*.xmlsind 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 insrc/*.txtbleibt 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_instancesauf, um das Zielprojekt zu sehen, und wähle dann die Instanz mitselect_instance; die Auswahl wird durchMcp-Session-Idisoliert, und es findet kein stiller Wechsel statt, wenn die Instanz beendet wird.
Öffentliche Werkzeuge (tools/list)
Kategorie | Methode | Beschreibung |
Lesen |
| Aktualisiert das Mirror aus dem IDE-Projekt im Speicher ( |
Lesen |
| Entpackt andere |
Lesen |
| Listet Dateien im Mirror per glob auf |
Lesen |
| Durchsucht den Mirror dateiweise; unterstützt mehrere Patterns, glob, Kontext, Pagination |
Lesen |
| Liest einzelne / mehrere Dateien oder Bereiche, mit Zeilennummern |
Lesen |
| Liest vollständige Unterprogramme / Deklarationsblöcke nach Namen des Top-Level-Codeelements |
Lesen |
| Gibt Seitenansicht und |
Bearbeiten |
| Exakter Textersatz (einzeln / in Batches) |
Bearbeiten |
| Überschreibt die echte Seite vollständig mit Quellcode, unterstützt |
Bearbeiten |
| Vorschau der strukturierten Unterschiede, ohne zurückzuschreiben |
Bearbeiten |
| Stellt den Snapshot vor dem Schreiben wieder her |
Aktuelle Seite |
| Name, Typ und Parsing-Quelle der aktuellen Seite |
Aktuelle Seite |
| Quellcode-Pfad, IDE-Prozesspfad, MCP-Port usw. |
Routing |
| Listet laufende AutoLinker-IDE-Instanzen und die Auswahl der aktuellen Sitzung auf |
Routing |
| Leitet die aktuelle MCP-Sitzung an die angegebene Instanz |
Kompilierung |
|
|
Interaktion |
| Führt PowerShell nach Bestätigung aus, beendet den Prozessbaum bei Zeitüberschreitung |
Netzwerk |
| Durchsucht das Web |
Netzwerk |
| Ruft öffentlichen HTTP(S)-Text ab, blockiert Loopback / private Netze / Weiterleitungen |
Netzwerk |
| 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 120target 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
Ermittle in IDA die korrekte
函数签名(die meisten Kernbibliotheksfunktionen liegen inLibFn.objvonkrnln_static.lib); eine Referenz ist die Open-Source-Implementierung der BlackMoon-Kernbibliothek.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; }Ö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(vorkrnln_static.libeingefü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
Nach dem Speichern wird es bei der statischen Kompilierung wirksam; Warnungen wie
LNK4006/LNK4088können auftreten, beeinträchtigen den Betrieb aber nicht.
Hinweis
Diese Methode aktiviert automatisch
/FORCEdes Linkers, um Konflikte zu ignorieren.Die eigene Lib muss
/GLdeaktivieren, sonst ignoriert der zweite Link-Durchlauf die von AutoLinker angepasste Lib-Reihenfolge.Das Beispiel
TestCoreverwendet 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
A full backend your AI coding agent can set up over MCP
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
List, read, edit, and deploy your GenMB AI-generated apps from any MCP client.
Related MCP Servers
- 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.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables compatible MCP AI tools to read, write, design windows, and run programs in the E-Language IDE.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to control local Windows development tools by exposing project files, code search, file editing, test execution, Git operations, and resource viewing through a secure MCP interface with permission controls.11Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to access unified development tools including code generation, documentation synchronization, test case rendering, and architecture graph queries through a single MCP server.-