AgentDoc Patch Notes – April 2026

Changelog · 6 Min. Lesezeit

Eine kurze, dichte Runde an Fixes ist im letzten Sprint in AgentDoc (auch bekannt als agent doc, agentdocs, docedit) gelandet. Das Thema dieses Mal ist Renderer-Korrektheit: GrenzfĂ€lle, in denen die Tool-Ausgabe des Agenten technisch gĂŒltig war, die visuelle Ebene aber entweder Informationen verlor oder, schlimmer noch, Stile erfand, die der Agent gar nicht angefordert hatte. FĂŒnf Patches, alle gezielt, keine API-Änderungen.

1. Verschachtelte Listen: relative Tiefe bei der Normalisierung erhalten

c62928c · fix(renderer): preserve relative depth in nested-list normalization

Wenn der Agent verschachtelte geordnete/ungeordnete Listen mit gemischter EinrĂŒckung ausgab, hat der Normalisierungs-Durchlauf des Renderers die Tiefen auf die niedrigste im Markdown vorhandene Ebene reduziert – das bedeutete, dass eine Liste der Form 1. → 1.1. → 1.1.1. als drei Geschwister statt als Baum gerendert wurde. Der Fix Ă€ndert den Normalizer von absolutem Boden auf relativen Offset: Tiefenunterschiede innerhalb des Blocks bleiben erhalten, nur die globale EinrĂŒckung wird normalisiert.

Warum das fĂŒr Agenten wichtig ist: Viele Modelle geben insert_text-Aufrufe mit Inhalten aus, die auf der LLM-Ebene umgebrochen wurden (z. B. ein Modell, das EinrĂŒckung als 2 Leerzeichen gelernt hat, wĂ€hrend das Dokument 4 Leerzeichen verwendet). Der Renderer muss die Struktur respektieren, nicht den rohen Whitespace.

2. Dekorationsklassen werden jetzt komponiert statt ersetzt

ddfb64a · fix(formatting): decoration-* classes compose instead of replacing

Bisher hat ein Aufruf von apply_decoration(target, "decoration-underline") auf einem Span, der bereits decoration-strikethrough trug, die vorhandene Klasse ĂŒberschrieben. Das ist die falsche Semantik: Dekorationen sind orthogonal (man kann denselben Token unterstreichen und durchstreichen), und genau das hat unser Docstring versprochen. Der Bug kam von einer einzigen className =-Zuweisung im Dekorations-Setter, die wir durch ordentliche classList-BuchfĂŒhrung ersetzt haben, die hinzufĂŒgt, ohne Geschwister derselben Familie zu entfernen.

3. apply_*-Tools haben jetzt eine korrekte TOGGLE-Semantik

8201f0a · fix(content_ops): implement TOGGLE on apply_* tools (matches docstrings)

Die MCP-Tool-OberflĂ€che hat Toggle-Verhalten bei apply_bold, apply_italic, apply_underline usw. beworben – das heißt, ein zweiter Aufruf auf derselben Auswahl sollte die Formatierung entfernen, nicht doppelt anwenden. Die Implementierung war jedoch immer „set-on". Der Fix fĂŒhrt eine StatusprĂŒfung auf dem aufgelösten Span ein und verzweigt: Ist die Formatierung bereits vorhanden und deckt sie die Auswahl vollstĂ€ndig ab, wird sie entfernt; ist sie abwesend oder nur teilweise vorhanden, wird sie einheitlich angewendet.

Das ist wichtiger, als es klingt. Sprach-Flows setzen stark auf „ach, mach das rĂŒckgĂ€ngig" als Wiederholungssignal; der Agent, der das in einen zweiten apply_bold-Aufruf ĂŒbersetzt, tut nun das Richtige, ohne ein separates remove_format-Tool aufrufen zu mĂŒssen. Wir haben zwei LLM-Roundtrips aus einem hĂ€ufigen Pfad entfernt.

4. Escaping von Inline-Code innerhalb von [text]{.class}-Attributen

1e32d70 · fix(renderer): rewrite [text]{.class} swallowed inside inline-code

Der Vorab-Durchlauf des Renderers fĂŒr unsere erweiterte Attribut-Syntax lief vor der Markdown-zu-HTML-Stufe, was bedeutete, dass Zeichenketten wie `[text]{.foo}`, die innerhalb von durch Backticks begrenztem Inline-Code auftauchten (also wörtliche Dokumentation der Syntax), als gestylte Spans umgeschrieben statt als Code angezeigt wurden. Wir ĂŒberspringen das Umschreiben jetzt, wenn der Offset innerhalb eines Code-Spans liegt. Dokumentationsseiten – einschließlich dieser – rendern wieder korrekt.

5. decoration-*-Klassen gelten fĂŒr jedes Element

a05b44c · fix(frontend): style decoration-* classes on any element, not just span

Die CSS-Regeln fĂŒr .decoration-underline, .decoration-strikethrough usw. waren als span.decoration-* eingeschrĂ€nkt. Das funktionierte fĂŒr den hĂ€ufigen Fall, scheiterte aber, wenn der Agent eine Dekoration auf eine Überschrift, ein Listenelement oder eine Tabellenzelle anwandte. Der Fix entfernt die Element-Namens-Qualifizierung, sodass Dekorationen nun orthogonal zum Elementtyp sind – konsistent mit dem Toggle-Semantik-Fix oben und mit der Dokumentation.

Wie geht es weiter

Die nÀchste Arbeitsrunde steht rund um BYOK an (Bring-Your-Own-Gemini-API-Key), was erfordert, dem Frontend-Modal und der Kontingent-Status-Pille beizubringen, mit den neuen Modulen byok_modal.js und quota_status.js zu koexistieren. Danach machen wir einen gezielten Durchgang durch den Chat-Router, der einige Branches angesammelt hat.

Wenn du die technischen Überlegungen hinter den oben genannten Tool-Design-Entscheidungen nachvollziehen möchtest, deckt der Beitrag zur Tool-GranularitĂ€t das Framework ab, mit dem wir entscheiden, ob ein Verhalten ein Tool, ein Tool-Argument oder in die Reasoning-Ebene des LLM verlagert werden sollte.

← Tool-GranularitĂ€t bei LLM-Agenten Weiter: PDF- + DOCX-Export neu gebaut →