const fs = require("fs"); const B = String.fromCharCode(96); const T = B + B + B; const lines = [ "# Agent-Richtlinien f\u00fcr dieses Projekt", "", "## Systemumgebung", "", "- **Betriebssystem: Windows** \u2013 Alle Befehle und Pfade m\u00fcssen Windows-kompatibel sein (z. B. Pfadtrennzeichen " + B + "\\" + B + ", PowerShell-Syntax).", "", "---", "", "## Projekt\u00fcbersicht", "", "- **Statische Landingpage** f\u00fcr **Haus Schleusingen**", "- Reines HTML, CSS und JavaScript (kein Framework, kein Build-Step)", "- Ausgeliefert \u00fcber einen **Nginx-Docker-Container** (nginx:alpine)", "- Git-Repository: " + B + "https://git.home.kies-media.de/greggy/landingpage-haus-schleusingen.git" + B, "", "### Dateistruktur", "", "| Pfad | Beschreibung |", "|-------------------------------|----------------------------------------------|", "| " + B + "haus-schleusingen.html" + B + " | Einstiegsseite (einzige HTML-Datei) |", "| " + B + "css/haus-schleusingen.css" + B + " | Hauptstylesheet |", "| " + B + "js/haus-schleusingen.js" + B + " | Haupt-JavaScript |", "| " + B + "js/masonry.pkgd.min.js" + B + " | Masonry-Layout-Bibliothek (nicht bearbeiten) |", "| " + B + "fonts/fonts.css" + B + " | Schriftart-Einbindungen |", "| " + B + "bilder/" + B + " | Bildressourcen |", "| " + B + "nginx.conf" + B + " | Nginx-Konfiguration |", "| " + B + "Dockerfile" + B + " | Docker-Image-Definition (nginx:alpine) |", "", "---", "", "## Code-Qualit\u00e4t & Linting", "", "### Wichtig: Linting nach jeder Code\u00e4nderung durchf\u00fchren", "", "**F\u00fchre nach jeder Code\u00e4nderung " + B + "npm run lint" + B + " aus**, um die Codequalit\u00e4t zu garantieren.", "", "Das Projekt verwendet folgende Tools:", "", "| Werkzeug | Zweck | Konfigurationsdatei | Befehl |", "| --------------- | -------------------- | ------------------- | ------------------- |", "| **HTMLHint** | HTML-Linting | " + B + ".htmlhintrc" + B + " | " + B + "npm run lint:html" + B + " |", "| **Stylelint** | CSS-Linting | " + B + ".stylelintrc.json" + B + " | " + B + "npm run lint:css" + B + " |", "| **ESLint** | JavaScript-Linting | " + B + "eslint.config.js" + B + " | " + B + "npm run lint:js" + B + " |", "| **Prettier** | Code-Formatierung | " + B + ".prettierrc" + B + " | " + B + "npm run format" + B + " |", "| **Husky** | Git Hooks | " + B + ".husky/pre-commit" + B + " | \u2013 |", "| **lint-staged** | Gesteuerte Dateien | " + B + "package.json" + B + " | \u2013 |", "", "Alle Linter auf einmal ausf\u00fchren:", "", T + "powershell", "npm run lint", T, "", "### ESLint-Regeln (besonders beachten)", "", "- " + B + "no-unused-vars" + B + " \u2192 **Warnung** (ungenutzte Variablen vermeiden)", "- " + B + "no-undef" + B + " \u2192 **Warnung** (nur definierte Variablen verwenden)", "- " + B + "prettier/prettier" + B + " \u2192 **Fehler** (Prettier-Formatierung ist Pflicht)", "- Globale Variablen: " + B + "browser" + B + " und " + B + "jquery" + B + " sind verf\u00fcgbar", "- " + B + "*.min.js" + B + "-Dateien werden ignoriert (nicht linten/bearbeiten)", "", "### HTMLHint-Regeln", "", "- Tag-Paarung Pflicht (" + B + "tag-pair" + B + ")", "- Tags & Attribute in Kleinschreibung (" + B + "tagname-lowercase" + B + ", " + B + "attr-lowercase" + B + ")", "- Doctype an erster Stelle (" + B + "doctype-first" + B + ")", "- Eindeutige IDs (" + B + "id-unique" + B + ")", "- " + B + "alt" + B + "-Attribut bei Bildern Pflicht (" + B + "alt-require" + B + ")", "- " + B + "" + B + " erforderlich (" + B + "title-require" + B + ")", "", "---", "", "## Entwicklung", "", "- Kein Build-Step erforderlich \u2013 statische Dateien", "- Lokaler Entwicklungsserver: " + B + "npx serve ." + B + " oder VS Code Live Server", "- Node.js \u2265 18, npm \u2265 9", "", "## Deployment", "", T + "powershell", "# Image bauen", "docker build -t landingpage-haus-schleusingen .", "", "# Container starten", "docker run -d -p 8080:80 -v ${pwd}:/usr/share/nginx/html:ro landingpage-haus-schleusingen", T, "", "Website erreichbar unter: **<http://localhost:8080>**", "", "---", "", "## Wichtige Erkenntnisse", "", "- jQuery wird als globale Bibliothek vorausgesetzt (in ESLint-Konfig definiert)", "- Masonry (" + B + "masonry.pkgd.min.js" + B + ") wird f\u00fcr Layout-Zwecke eingesetzt \u2013 **nicht bearbeiten**", "- Husky Pre-Commit-Hook f\u00fchrt automatisch lint-staged aus (kein manueller Schritt n\u00f6tig beim Committen)", "- Prettier-Formatierung ist verpflichtend \u2013 Code wird bei Commits automatisch formatiert", "- Projekt ist " + B + "commonjs" + B + "-Typ (kein ESM in " + B + "package.json" + B + ")", "", "---", "", "## Agent-Erkenntnisse (Systemumgebung & Tools)", "", "### Terminal & Encoding (Windows)", "", "- **PowerShell-Encoding-Probleme**: Terminal-Ausgabe \u00fcber " + B + "run_terminal_command" + B + " zeigt UTF-8-Zeichen (z. B. deutsche Umlaute) oft falsch an. Die Datei selbst ist korrekt. Immer mit " + B + "read_file" + B + " statt Terminal-Ausgabe pr\u00fcfen.", "- **Backtick-Konflikt**: PowerShell nutzt Backtick (" + B + B + ") als Escape-Zeichen. Markdown-Backticks in Here-Strings (@\u0022...\u0022@) f\u00fchren zu Fehlern. F\u00fcr Dateien mit Backticks stattdessen **Node.js-Skripte** verwenden.", "- **Zuverl\u00e4ssige Dateierstellung**: Bei Inhalten mit Sonderzeichen (Umlaute, Backticks, Emojis) Node.js-Skripte (" + B + "fs.writeFileSync" + B + ") statt PowerShell-Befehle nutzen. Beispiel:", " " + T + "javascript", " const fs = require(" + B + "fs" + B + ");", " const B = String.fromCharCode(96); // Backtick vermeiden", " const lines = [" + B + "Zeile 1" + B + ", " + B + "Zeile 2" + B + "];", " fs.writeFileSync(" + B + "datei.md" + B + ", lines.join(" + B + "\\n" + B + "), " + B + "utf8" + B + ");", " " + T, "", "### Datei-Tools", "", "- **" + B + "read_file" + B + "-Anzeigegrenze**: Lange Dateien werden in der Vorschau scheinbar abgeschnitten \u2013 die Datei selbst ist vollst\u00e4ndig. Mit " + B + "run_terminal_command" + B + " und " + B + "Get-Content -Tail N" + B + " das Dateiende pr\u00fcfen.", "- **" + B + "create_new_file" + B + "-Quoting**: Inhalt darf nicht mit Anf\u00fchrungszeichen beginnen, da diese sonst als Teil des Inhalts \u00fcbernommen werden. Immer die erstellte Datei verifizieren.", "- **" + B + "single_find_and_replace" + B + "**: Exakte String\u00fcbereinstimmung erforderlich. Zeilenumbr\u00fcche und Leerzeichen m\u00fcssen exakt passen. Vor dem Ersetzen den Dateiinhalt mit " + B + "read_file" + B + " oder " + B + "read_file_range" + B + " pr\u00fcfen.", "- **" + B + "edit_existing_file" + B + "-Encoding**: Kann UTF-8-Zeichen (Umlaute, Sonderzeichen) besch\u00e4digen. F\u00fcr Dateien mit Nicht-ASCII-Zeichen stattdessen Node.js-Skripte verwenden.", "", "### Workflow-Empfehlungen", "", "1. **Dateien lesen**: Immer " + B + "read_file" + B + " oder " + B + "read_file_range" + B + " nutzen (nicht Terminal).", "2. **Dateien schreiben/\u00e4ndern**: " + B + "edit_existing_file" + B + " oder " + B + "single_find_and_replace" + B + " bevorzugen \u2013 aber Vorsicht bei Nicht-ASCII-Zeichen.", "3. **Komplexe Dateierstellung**: Node.js-Skript \u00fcber " + B + "create_new_file" + B + " + " + B + "run_terminal_command" + B + " ausf\u00fchren, danach Hilfsskript l\u00f6schen.", "4. **Terminal-Ausgabe**: Nur f\u00fcr Dateigr\u00f6\u00dfen, Git-Befehle und npm-Skripte nutzen \u2013 nicht zur Inhaltspr\u00fcfung von Textdateien.", "", ]; fs.writeFileSync("AGENTS.md", lines.join("\n"), "utf8"); console.log("Done");