Hotfix LLMAI-122: KI-Button im Editor (LLM App 0.8)
Problem
Im WYSIWYG-Editor ist das ✨-Icon dauerhaft ausgegraut und die /-Quick-Action "Generative AI" fehlt — ohne Fehlermeldung in der Konsole.
- Upstream-Ticket: LLMAI-122 (Fix Version 0.8.1, Stand 2026-07-03 noch nicht released)
- Betroffene Version: 0.8
Ursache
Race Condition: init() des CKEditor-Plugins ruft command.enable() auf, sobald der Berechtigungs-Check zurückkommt — potenziell bevor der Editor instanceReady feuert. XWikis WYSIWYG-Editor setzt während instanceReady alle Command-States zurück. Der Button bleibt deaktiviert, die Quick-Action-Registrierung hängt an derselben Stelle. Zusätzlich wurde das Modal-Modul in XWiki 18.3.0 von modal in xwiki-wysiwyg-modal umbenannt.
Diagnose-Befunde: POST /rest/v1/check-access lieferte korrekt {"check":true}; das Plugin war geladen, der Command llmaction existierte, blieb aber in TRISTATE_DISABLED; manuell ausgeführt funktionierte die Aktivierungskette.
Angewendeter Fix (2026-07-03)
Der Code des XWiki.JavaScriptExtension-Objekts (Nr. 0, Property code) auf der Seite AI.Code.CKEditorPlugin wurde durch den Stand des Upstream-Fixes ersetzt.
Quelle des eingespielten Codes:
- Commit 93cc4a0 ("LLMAI-122: LLM Button in editor not working", 2026-06-11, Branch main)
- Datei: application-ai-llm-models/application-ai-llm-models-ui/src/main/resources/AI/Code/CKEditorPlugin.xml
- Eingespielt: Inhalt des <code>-Propertys (HTML-Entities dekodiert), per REST-PUT auf .../objects/XWiki.JavaScriptExtension/0/properties/code aus einer Admin-Session. Kein Neustart nötig, Editor-Seite neu laden genügt.
Verifikation
- editor.getCommand('llmaction').state = aktiv statt TRISTATE_DISABLED
- Quick-Action registriert: id llm-ai, Name "Generative AI"
- ✨-Icon in der Toolbar klickbar
Rollback
Seiten-Historie von AI.Code.CKEditorPlugin → Version vor dem 2026-07-03 wiederherstellen.
Beim Upgrade
Die Seite gilt für den Extension Manager als lokal modifiziert. Beim Upgrade auf ≥ 0.8.1 den gemeldeten Merge-Konflikt zugunsten der Extension-Version auflösen — der Fix ist dort enthalten, danach ist dieser Hotfix obsolet.