Die letzte große Feature-Session des FAL-Zweigs: Die KI soll nicht nur Dateien lesen und referenzieren, sondern auch selbst generierte Bilder hochladen und Metadaten setzen. Use-Case: KI generiert ein Bild, kodiert es als base64, lädt es in einen TYPO3-Storage, setzt Title/Alt-Text/Copyright in mehreren Sprachen.
Diese Session enthält drei Austausche – und damit mehr Interaktion als alle anderen Sessions.
Der dritte Austausch entsteht durch einen echten Bug: Die KI kann das
UploadFile-Tool nicht finden. Copilot diagnostiziert die Ursache eigenständig:
TYPO3 DI-Container-Cache.
Architektur-Highlight: Copilot schlägt vor, eine neue abstrakte Basisklasse AbstractFileTool einzuführen und die bestehende GetFileMetadataTool zu refaktorieren – alles in einer Implementierungs-Session. Das ist kein kleines Feature, sondern ein Architektur-Upgrade.
base64_decode → tempfile → $storage→addFile() als Implementierungsweg.localize-Command für neue Übersetzungen – nicht nur Update bestehender.File/-Namespace, plus Architektur-Upgrade:$storage→addFile($tempFile, $folder, $fileName, $conflictMode). 10 MB Limit. Annotations: readOnlyHint=false, idempotentHint=false.AbstractFileTool einzuführen und GetFileMetadataTool zu refaktorieren – ohne dass der Prompt danach fragt. Das zeigt, dass Copilot DRY-Prinzipien aus dem Kontext ableitet.assertFalse($result→isError) schlägt fehl – Upload gibt Fehler zurück. Tatsächlicher Fehler: FAL-API.DuplicationBehavior – alte String-Klasse vs. neue native Enum.TYPO3\CMS\Core\Resource\DuplicationBehavior) und neue native Enum (TYPO3\CMS\Core\Resource\Enum\DuplicationBehavior). Der instanceof-Check in addFile() prüft gegen die alte Klasse – daher Deprecation unvermeidbar bis TYPO3 v14.Produktionsproblem: Die KI kann das Tool nicht unter dem Namen "FileUpload" finden. Copilot muss diagnoszieren, ob das ein Naming-, Registrierungs- oder Cache-Problem ist.
Hn\McpServer\: resource: '../Classes/*' erfasst neuen File/-Namespace. ✓mcp:test list auszuführen, schlägt fehl. Das Terminal-Problem ist konsistent über alle Sessions. In produktiven PhpStorm-Umgebungen sollte man dieses Problem durch ein IDE-Update oder Neustart lösen.php typo3 cache:flush --group=di oder über das TYPO3-Backend (Admin Tools → Maintenance). Copilot macht explizit darauf aufmerksam.| Datei | Beschreibung |
|---|---|
AbstractFileTool.php | Abstrakte Basisklasse: resolveFile(), resolveLanguageUid(), buildLanguageSchemaProperty(), createJsonResult() |
UploadFileTool.php | base64 → tempfile → $storage→addFile(); conflictMode; 10 MB Limit; Subfolder-Erstellung |
SetFileMetadataTool.php | DataHandler update/localize; title, description, alternative, copyright, creator, categories; ISO-Sprachcodes |
UploadFileToolTest.php | 11 Tests: Upload, Subfolder, createFolder, Konfliktmodi, Fehlerfälle, Schema |
SetFileMetadataToolTest.php | 10 Tests: Default-Metadata, Multi-Field, lokalisiert, Fehlerfälle, Schema |
| Datei | Änderung |
|---|---|
GetFileMetadataTool.php | Refactored: extends AbstractFileTool statt AbstractTool; duplizierte Methoden entfernt |
| Test-Suite | Ergebnis |
|---|---|
| GetFileMetadataTool (Refactoring-Verifikation) | 6/6 ✓ |
| UploadFileTool | 11/11 ✓ |
| SetFileMetadataTool | 10/10 ✓ |
| Gesamte Test-Suite | 447/447 ✓ |
Session MCP5 ist die vollständigste des Projekts – Plan, Implementierung, Architektur-Upgrade, Deprecation-Diagnose, Refactoring-Verifikation, Gesamttest-Suite und abschließend DI-Cache-Debugging. Das ist eine reale Entwicklungs-Session, keine idealisiierte Demo.
Besonders lehrreich: Die DuplicationBehavior-Deprecation ist ein TYPO3-internes Problem, das nicht durch besseren Code gelöst werden kann. Copilot erkennt das, erklärt es klar und hört auf, nach Workarounds zu suchen. Das ist wichtige Selbsterkenntnis: Nicht jeder Fehler ist der eigene.
Der dritte Austausch zeigt, dass Copilot auch als Debugging-Partner funktioniert – systematische Hypothesen, schrittweise Elimination, klare Diagnose. Den DI-Cache-Flush hätte ein erfahrener TYPO3-Entwickler sofort vermutet; Copilot kommt nach mehreren Schritten zum selben Ergebnis.
AbstractFileTool war nicht Teil des ursprünglichen Prompts – Copilot schlägt es vor, weil resolveFile() und resolveLanguageUid() in GetFileMetadataTool bereits existieren und kopiert werden würden. DRY-Refactoring ist leichter, wenn es im selben Zug wie eine Feature-Implementierung passiert.
Nach dem Refactoring von GetFileMetadataTool auf AbstractFileTool führt Copilot die bestehenden Tests sofort durch – bevor neue Tests geschrieben werden. 6/6 grün = Refactoring sauber. Diesen Schritt nicht zu überspringen verhindert, dass Refactoring-Fehler in neuen Tests versteckt werden.
Neue Klassen (auch mit AutoconfigureTag) sind erst nach Cache-Flush sichtbar. Symptom: Tool erscheint nicht in der Tool-Liste der KI. Lösung: php typo3 cache:flush --group=di. Das gilt für alle TYPO3 13+ Projekte mit Symfony DI.
Die DuplicationBehavior-Deprecation kommt aus dem TYPO3-Kern, nicht aus dem eigenen Code. Copilot analysiert die Ursache tief, stellt fest: "Erst in v14 gelöst" – und hört auf, Workarounds zu suchen. Copilot in Debugging-Sessions nicht zu drängen, "irgendetwas zu tun", wenn das Problem extern liegt.
TYPO3 MCP nutzt str_replace('Tool', '', ClassName): UploadFileTool → UploadFile. Die KI sucht daher nach "UploadFile", nicht "FileUpload". Tool-Namen-Konventionen sind für die KI wichtig – falsche Namen führen zu "Tool nicht gefunden" ohne klare Fehlermeldung.
Copilot führt nach der Implementierung alle 447 Tests aus, nicht nur die neuen 21 Tests. Das ist der einzige zuverlässige Weg, Regressionen zu finden. Wenn das in Ihrer PhpStorm-Konfiguration nicht automatisch passiert, fordert man Copilot explizit auf: "run the full test suite".
Bei SetFileMetadata muss Copilot unterscheiden: Gibt es bereits eine Übersetzung in der Zielsprache? Ja → DataHandler update. Nein → DataHandler localize-Command, der die Übersetzung anlegt und dann die Felder setzt. Dieser Unterschied ist TYPO3-spezifisch und wurde korrekt im Plan erfasst.
| Element | Qualität | Anmerkung |
|---|---|---|
| Austausch 1 – Prompt | ✓ Sehr gut | "AI generated images" konkretisiert den Use-Case; "set and translate metadata" fordert Lokalisierung |
| Austausch 1 – Antwort | ✓ Exzellent | AbstractFileTool eigenständig vorgeschlagen, DataHandler localize korrekt, Zweiformat-API, 10 MB Limit |
| Austausch 2 – Prompt | ✓ Gut | "Start implementation" – minimaler Trigger |
| Austausch 2 – Antwort | ✓ Exzellent | Refactoring-Verifikation, Deprecation korrekt eingeordnet, 447/447 Tests grün, vollständige Zusammenfassung |
| Austausch 3 – Prompt | ✓ Gut | Kurzer Bug-Report ohne überflüssige Infos |
| Austausch 3 – Antwort | ✓ Sehr gut | Systematische Diagnose, falscher Tool-Name erkannt, DI-Cache als Ursache identifiziert |