AgentDoc Patch Notes â April 2026
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.