[Unveröffentlicht]
[v0.9.2] - 2026-10-09
Behoben
- Ausgehende Anfragen werden beim Senden gegen private Adressen geprüft, nicht nur beim Speichern der URL. Workflow-Webhooks lösen ihren Host bei der Zustellung erneut auf und lehnen private oder interne Adressen ab. Dadurch kann ein Hostname, der nach dem Speichern seinen DNS-Eintrag ändert, nicht mehr auf das interne Netzwerk zugreifen. Weiterleitungen an eine private IP-Adresse werden bei jeder ausgehenden Anfrage abgelehnt, und die Metadatenadresse von Alibaba Cloud (
100.100.100.200, Bereich100.64.0.0/10) ist jetzt zusammen mit den anderen internen Bereichen blockiert.
[v0.9.1] - 2026-10-07
Behoben
- Ein gespeichertes Datenbankpasswort wird nur für die Verbindung verwendet, für die es gespeichert wurde. Beim Testen einer Verbindung oder Bearbeiten eines Datenbank-Connectors wird das gespeicherte Passwort nur für den Besitzer des Connectors wiederverwendet und nur, solange Treiber-, Host-, Port-, Datenbank-, Benutzernamen- und TLS-Einstellungen unverändert sind. Andernfalls muss das Passwort erneut eingegeben werden. Beim Speichern einer Bearbeitung mit leer gelassenem Passwortfeld bleibt das gespeicherte Passwort nun erhalten, anstatt gelöscht zu werden.
[v0.9.0] - 2026-10-01
Hinzugefügt
- Aufrufe mit strukturierter Ausgabe protokollieren, welche Extraktionsebene die Antwort geliefert hat. Jeder Aufruf protokolliert die Ebene, die das Ergebnis tatsächlich erzeugt hat, und gibt eine Warnung aus, wenn alle Ebenen fehlschlagen und ein Standardwert zurückgegeben wird. Dadurch ist eine stille Verschlechterung auf die Freitextanalyse jetzt in den Protokollen sichtbar.
- Datenbankspalten können als personenbezogene Daten gekennzeichnet werden. Eine im Schemamanager des Connectors als PII gekennzeichnete Spalte wird weiterhin im Schema angezeigt, das der Agent sieht. Ihre Werte werden jedoch in jedem Abfrageergebnis maskiert, einschließlich bei
SELECT *. Das Aufrufprotokoll des Connectors erfasst, welche Spalten maskiert wurden und ob der Connector schreibgeschützt war.
Behoben
- GPT-6-Modelle funktionieren. An
gpt-6-luna,gpt-6-sol,gpt-6.1-solundgpt-6-astrawurdenmax_tokensund eine benutzerdefinierte Temperatur übergeben, die diese Modelle ablehnen – daher schlug jeder Aufruf fehl.gpt-6.1-solundgpt-6-astrakönnen das Reasoning nicht deaktivieren und akzeptieren Tools nur über die Responses API; strukturierte Ausgaben und Tool-Aufrufe für diese Modelle laufen jetzt dort mit dem niedrigsten Reasoning-Aufwand. MitFIM_GPT5_RESPONSES_MODE=offoder an einem Endpunkt ohne/v1/responseskönnen diese beiden Modelle keine Tools aufrufen. - Übersetzte Dokumentation rendert fett formatierte Einleitungssätze korrekt. In CJK-Übersetzungen fehlte nach einem schließenden
**das Leerzeichen, sodass die Sternchen auf der Seite sichtbar waren; die Übersetzungspipeline behält es jetzt bei. - Die Veröffentlichung einer Ressource lässt sich jetzt zurücknehmen. Der Zugriff wurde allein durch das Abonnement gewährt. Daher behielten alle, die einen Agent, Connector, MCP-Server, Skill oder Workflow abonniert hatten, diesen auch dann, wenn der Eigentümer ihn wieder auf privat setzte. Die einzige Möglichkeit, den Zugriff tatsächlich zu entziehen, war, die Ressource zu löschen. Bei jeder Verwendung wird jetzt erneut geprüft, ob das Abonnement mit den aktuellen Freigabeeinstellungen der Ressource übereinstimmt – auch innerhalb einer laufenden Unterhaltung.
- Wird eine Ressource aus dem Market entfernt, ist sie nicht mehr zugänglich. Die Admin-Aktion blendete sie bisher nur in der Liste aus: Bestehende Abonnenten waren davon nicht betroffen, und alle, die die Ressourcen-ID kannten, konnten sie weiterhin abonnieren. Die Ressource wird jetzt wieder auf privat gesetzt, wie bei der Aufhebung der Veröffentlichung durch den Eigentümer.
- Wenn du einen Agent, Skill oder Workflow abbestellst, werden selbst eingerichtete Connectoren nicht mehr gelöscht. Bei der Bereinigung von Abhängigkeiten ließ sich nicht unterscheiden, ob ein Connector in deinem Auftrag installiert worden war oder ob du ihn selbst abonniert und Zugangsdaten eingegeben hattest. Deshalb wurden beide entfernt – und damit auch die gespeicherten Zugangsdaten. Zusammen mit einer Lösung wird nur entfernt, was diese installiert hat.
- Das Löschen einer Organisation schlägt nicht mehr fehl und hinterlässt keine Zugriffsrechte mehr. Sobald ein Mitglied etwas in der Organisation veröffentlicht hatte, schlug das Löschen fehl; außerdem behielten Mitglieder ihre über die Organisation erhaltenen Abonnements. In der Organisation veröffentlichte Ressourcen gehen an ihre Eigentümer zurück und werden auf privat gesetzt. Organisationsbezogene Abonnements werden widerrufen, wie beim Austritt eines Mitglieds.
- Abonnements werden zusammen mit der Ressource gelöscht, auf die sie verweisen, statt nach deren Löschung bestehen zu bleiben.
- Ein Skill, der von zwei Market-Agenten gemeinsam genutzt wird, bleibt erhalten, wenn einer davon gelöscht wird.
- Das Abonnieren eines Skills oder Workflows wird abgelehnt, solange das Modul deaktiviert ist. Damit stimmt das Verhalten mit der Auflistung überein, in der sie bereits ausgeblendet waren.
[v0.8.12] - 2026-09-04
Hinzugefügt
- ENV-Fallback kann über das Admin-Panel synchronisiert werden.
scripts/env_from_active_group.pykopiert die aktive Modellgruppe (allgemein / schnell / Reasoning, optional auch Bildgenerierung) in.env, sodass der i18n-Hook, Evals und andere Pfade ohne DB nicht mehr auf einen veralteten Provider zurückfallen.
Geändert
- Die Bereiche des AI assistant verwenden denselben Composer wie der Chat. Die Assistenten für die Wissensdatenbank, agent und connector erhalten jetzt das pillenförmige Eingabefeld mit einem mehrzeiligen Textbereich und einer runden Senden-Schaltfläche. Enter sendet die Nachricht nicht mehr, wenn gerade eine Eingabemethode zusammengestellt wird.
Behoben
- Die Bildgenerierung funktioniert mit den
gpt-image-*-Modellen von OpenAI. Die Anfrage sendet nicht mehrresponse_format, und Seitenverhältnisse werden den von diesen Modellen akzeptierten Größen zugeordnet. - Das i18n-Übersetzungsskript akzeptiert GPT-5.x- und o-series-Modelle. Für Reasoning-Modelle wird
temperatureweggelassen, anstatt mit einem 400-Fehler fehlzuschlagen.
[v0.8.11] - 2026-09-03
Geändert
- Der Chat-Composer schwebt über dem Nachrichtenstrom. Anhänge, die Modus- und Agenten-Auswahl sowie die Senden-Schaltfläche befinden sich jetzt in einer pillenförmigen Eingabe, die über der Konversation verbleibt, während Nachrichten darunter scrollen; bei einem leeren Chat ist sie zentriert über den Beispielkarten.
[v0.8.10] - 2026-08-28
Hinzugefügt
-
Instanz-Zugriffsmodell für die Abrechnung. Admins wählen eine von drei Optionen: keine Abonnements (Software-Standard, monatliches Kontingent
0= unbegrenzt), inklusive + kostenpflichtig oder nur kostenpflichtig. Der enthaltene Standardplan kann nicht gelöscht werden; kostenpflichtige Vorlagen werden nicht mehr mit einer FIM Stripe Price ID ausgeliefert. -
GPT-5.x-Agenten behalten ihr Reasoning über Tool-Aufrufe hinweg. FIM One kommuniziert jetzt direkt über die OpenAI Responses API für GPT-5.x-Modelle und überträgt das verschlüsselte Reasoning jedes Schritts in den nächsten, sodass ein mehrstufiger Agent auf bereits erarbeiteten Ergebnissen aufbaut, anstatt sie bei jedem Tool-Durchlauf neu herzuleiten. Reasoning-Token-Anzahlen erscheinen in der Nutzungsübersicht, und das Denkpanel zeigt die eigene Zusammenfassung des Modells. Setzen Sie
FIM_GPT5_RESPONSES_MODE=bridge(oderoff), um zum vorherigen Verhalten zurückzukehren; Endpunkte ohne eine/v1/responses-Route fallen automatisch auf Chat-Completions zurück. - Reine Transformationsschritte in DAG-Plänen werden als einzelner direkter LLM-Aufruf ausgeführt. Der Planer kennzeichnet Merge-/Rewrite-/Zusammenfassungsschritte, die ausschließlich vorgelagerte Ausgaben verarbeiten, als direkte Schritte und überspringt die Tool-Schleife, die sie ohnehin nie nutzen würden – das senkt Kosten und Latenz. Jedes Schritt-Ergebnis protokolliert nun auch, wie es ausgeführt wurde (direkter Aufruf oder Agent-Schleife, Iterationen, verwendete Tools).
- Agenten können während der Ausführung klärende Multiple-Choice-Fragen stellen. Wenn eine Aufgabe in wesentlich unterschiedliche Richtungen gehen könnte, pausiert der Agent und präsentiert bis zu vier strukturierte Fragen im Chat, jeweils mit 2–4 Optionen sowie einem Freitext-Feld „Sonstiges”. Eine Antwort setzt die Ausführung an derselben Stelle fort; Überspringen oder ein Timeout lässt den Agenten nach eigenem Ermessen weitermachen.
- Agentenschritte erhalten Live-Einzeiler-Titel. Während ein Agent arbeitet, erhält jede Iteration eine kurz generierte Bezeichnung („Preisdaten werden überprüft…”), die in einem einzelnen eingeklappten Header angezeigt wird und zum neuesten Schritt wechselt. Beim Aufklappen wird die vollständige Schritt-Zeitleiste sichtbar, und die Bezeichnungen bleiben im Gesprächsverlauf erhalten.
- Modelle eines Providers können in großen Mengen gelöscht werden. Jede Modellzeile unter Admin → Modelle enthält ein Kontrollkästchen; der Header wählt die gesamte Liste aus, und Shift+Klick erweitert die Auswahl über einen Zeilenbereich. Das Löschen der Auswahl entfernt alle gewählten Modelle in einer einzigen Anfrage, nach einer Bestätigung mit Angabe der Anzahl.
- Kleine Vergleichstabellen in Chat-Antworten werden jetzt als Karten-Layouts dargestellt. Eine 2–3-spaltige Tabelle, deren erste Spalte Attributbezeichnungen enthält, zeigt jedes Attribut innerhalb seiner Wertzelle an (entsprechend dem Vergleichskarten-Stil, der von KI-Chat-UIs popularisiert wurde); größere Tabellen behalten das klassische Raster.
-
Chat-Antworten rendern jetzt Mermaid-Diagramme und SVG-Grafiken. Ein
mermaid-Codeblock wird zu einem thematisch gestalteten Diagramm, und einsvg-Block wird zu einem Bild mit Quell-Umschalter und Download; beide fallen auf einfachen Code zurück, wenn die Quelle unvollständig ist oder nicht geparst werden kann, sodass ein halb gestreamtes Diagramm nie einen Fehler anzeigt. - Antworten, Codeblöcke und Tabellen können kopiert werden. Jede Antwort hat eine „Als Markdown kopieren”-Aktion, Codeblöcke tragen einen Header mit der Sprachbezeichnung, und Tabellen bieten „Als Markdown kopieren” sowie einen CSV-Download (UTF-8, öffnet sich korrekt in Excel).
- Zitate zeigen, aus welchem Dokument sie stammen. Ein Zitat-Marker wird jetzt als Pill mit dem Dokumentnamen der Quelle dargestellt; benachbarte Marker werden zu einer Pill mit Zähler zusammengefasst, und das Popover listet alle dahinterliegenden Quellen auf.
-
/clearfunktioniert im Chat-Eingabefeld. Die Eingabe von/clearstartet ein neues Gespräch – identisch mit dem Klicken auf „Neuer Chat”; ein laufender Schritt wird zuerst gestoppt. -
Diagramme und Codeblöcke können heruntergeladen, nicht nur kopiert werden. Mermaid-Diagramme exportieren das gerenderte SVG, und jeder Codeblock wird mit einem Dateinamen entsprechend seiner Sprache heruntergeladen; ein
csv-Block wird als UTF-8-Datei heruntergeladen, die sich korrekt in Excel öffnet. - Der Composer warnt, bevor ein Bild an ein nur-Text-Modell gesendet wird. Wenn ein Bild angehängt wird, während das aktive Modell keine Bilder lesen kann, erscheint ein Hinweis, dass das Modell nur den Dateinamen erhält – aufgelöst aus dem Modell, das für diesen Schritt tatsächlich verwendet würde.
- Nicht gesendete Eingaben werden gespeichert. Text, eingefügte Clips und fertige Anhänge, die noch nicht gesendet wurden, werden pro Gespräch gespeichert – und separat für einen neuen Chat – sodass sie einen Seitenneuladen, einen Wechsel zu einem anderen Gespräch und eine abgelaufene Sitzung überstehen. Ein Entwurf wird gelöscht, sobald die Nachricht gesendet oder das zugehörige Gespräch gelöscht wird.
-
Chat-Antworten unterstützen LaTeX-Mathe-Begrenzer. Formeln, die mit
\[...\]oder\(...\)geschrieben sind, werden als Mathematik gerendert – entsprechend der bestehenden Dollar-Zeichen-Syntax; Begrenzer innerhalb von Code-Fences bleiben als Text erhalten.
Behoben
- Admin-Abrechnungs- und Zugriffsmodell-Einstellungen werden wieder in der Oberflächensprache angezeigt. Die Abrechnungseinstellungen, Zugriffsmodell- und Token-Kontingent-Texte unter Admin → Einstellungen sowie die zugehörigen Abonnementfehler und das Kontonutzungs-Panel zeigten englischen Text oder einen rohen Schlüssel in Chinesisch, Japanisch, Koreanisch, Deutsch und Französisch.
- Die Callback-URL eines Feishu-Kanals kann nun die Feishu-Verifizierung bestehen. Feishu lässt seine Signatur-Header beim einmaligen URL-Verifizierungs-Handshake weg, und der Callback-Endpunkt lehnte alles Unsignierte ab, sodass das Speichern der Anforderungsadresse immer mit „Challenge code not returned” fehlschlug und die Karten-Schaltflächen des Kanals nie funktionierten. Eine unsignierte Anfrage wird nun stattdessen über die anderen gemeinsamen Geheimnisse authentifiziert: Der verschlüsselte Umschlag muss sich mit dem Encrypt Key des Kanals öffnen lassen, und das Token muss mit dem Verification Token übereinstimmen, sofern eines konfiguriert ist. Ein unsignierter, unverschlüsselter Body wird weiterhin abgelehnt.
- Ein Social-Login kann nicht mehr von einem Konto mit einer unbestätigten E-Mail-Adresse übernommen werden. Das Verknüpfen eines Social-Logins mit einem bestehenden Konto erfordert nun, dass die Adresse auf beiden Seiten verifiziert wurde, nicht nur vom eingehenden Anbieter. Das Anmelden mit einem Anbieter, der die Adresse nie bestätigt hat, erstellt weiterhin ein Konto, aber dieses Konto kann nicht mehr mit einer späteren verifizierten Anmeldung abgeglichen werden.
- Eine durch das Ausgabelimit abgeschnittene Antwort führt nicht mehr die Hälfte ihrer Tool-Aufrufe aus. Wenn das Modell das Token-Limit mitten in einer Nachricht erreicht, werden alle Tool-Aufrufe in dieser Antwort verworfen und das Modell wird aufgefordert, sie kleiner neu auszugeben. Zuvor wurden Aufrufe, deren Argumente zufällig vollständig waren, ausgeführt, sodass ein Batch, den das Modell als Einheit geplant hatte, nur teilweise ausgeführt werden konnte, während das Transkript so aussah, als wäre alles davon ausgeführt worden.
- Das Senden während ein Anhang noch hochgeladen wird, lässt ihn nicht mehr fallen. Das Senden wartet nun auf den Abschluss des Uploads und schließt die Datei ein, wobei die Senden-Schaltfläche während des Wartens einen Spinner anzeigt; zuvor wurde die Nachricht ohne das Bild oder Dokument und ohne Warnung gesendet.
- Eine Nachricht, die nicht gesendet werden konnte, wird wieder in das Eingabefeld zurückgelegt. Wenn das Erstellen der Konversation fehlschlägt (abgelaufene Sitzung, Netzwerk nicht verfügbar), kehrt der eingetippte Text mit einem Fehler-Toast in den Composer zurück, anstatt zu verschwinden.
- Folgevorschlag-Chips bleiben in der Stimme des Benutzers. Vorgeschlagene Folgefragen sind so formuliert, als würde der Benutzer sie senden (Anfragen oder Fragen an den Assistenten), nicht als umgekehrte Präferenzumfragen wie „Was bevorzugen Sie…?”.
-
Exa-Dokumentation bezeichnet Exa nicht mehr als Standard-Suchanbieter. Integrations- und Umgebungsvariablen-Seiten beschreiben Exa nun als optionales Backend, das mit
WEB_SEARCH_PROVIDER=exaaktiviert wird; der Standard-Suchpfad bleibt Jina. - Das Sidebar-Logo ist wieder ein echter Link. Mittlere Maustaste und cmd/ctrl-Klick öffnen das Dashboard in einem neuen Tab; ein normaler Linksklick navigiert weiterhin und behält die kurze Sprunganimation.
Geändert
- Das Admin-Panel öffnet sich in einem neuen Tab. Wenn Sie im Benutzermenü „Admin-Panel” auswählen, bleibt der aktuelle Arbeitsbereich im Hintergrund geöffnet – passend zu den anderen externen Links in diesem Menü.
- Die Seitenleiste stellt Navigation an erste Stelle. Die Modulnavigation befindet sich oberhalb der Gesprächsliste als kompakte, durchgehende Liste (ohne Abschnittsbezeichnungen wie Build / Resources / Operate), mit engerem Abstand bei Navigationselementen, „Neuer Chat” / „Suche” und Gesprächszeilen – anstatt in einem Dock am unteren Rand der Seitenleiste versteckt zu sein.
- Gestreamte Antworten werden gleichmäßig dargestellt, ohne zu flackern. Eine wachsende Antwort wird nun Block für Block gerendert: Fertige Blöcke bleiben stabil, anstatt bei jedem Frame neu gerendert zu werden, und halb angekommene Formatierungen (Fett, Links, Mathematik) werden vervollständigt oder zurückgehalten, bis das Streaming abgeschlossen ist.
-
Endgültige Antworten werden während des Schreibens gestreamt. Der Agent signalisiert nun, wenn er mit dem Sammeln fertig ist, und schreibt die Antwort als live gestreamten Zug – sodass lange Antworten Token für Token mit vollem Detail eintreffen, anstatt nach einer Wartezeit wiedergegeben zu werden.
REACT_FINISH_SIGNAL=falsestellt das vorherige Verhalten wieder her. - Architekturdokumentation ordnet Graph-Engineering FIM One zu. Planning Landscape erklärt Loop- vs. Graph-Engineering, wie sich das von klassischen visuellen Workflows unterscheidet, wie es auf Workflow / DAG / ReAct abgebildet wird und was für jede Engine zu übernehmen ist. Außerdem wird der aktuelle Stand festgehalten, dass jeder DAG-Schritt bereits ein vollständiger ReAct-Agent ist (kein One-Shot-LLM-Aufruf). ReAct- und DAG-Engine-Seiten verlinken darauf.
- Einfache Chats bieten immer Folgefragen an. Gespräche ohne gebundenen Agenten erhalten nach jeder Antwort vorgeschlagene Folgefragen; agentengebundene Chats erfordern weiterhin den agentenbezogenen Schalter „Folgefragen” (standardmäßig deaktiviert). Abschlussäußerungen wie Begrüßungen oder Danksagungen können keine Chips zurückgeben.
- Eine neu gesendete Nachricht beginnt oben auf dem Bildschirm. Das Transkript lässt gerade genug Platz unterhalb des aktuellen Zuges, damit dessen erste Zeile den oberen Rand erreicht – die Frage bleibt so im Blick, und die Antwort wächst in den Raum darunter, anstatt dass der gesamte Zug am unteren Rand klebt. Der Platz verschwindet, sobald der Zug einen Bildschirm überschreitet.
- Reasoning-Blöcke bleiben während eines Zuges eingeklappt. Reasoning in ReAct- und DAG-Ausgaben zeigt nun standardmäßig eine einzeilige Vorschau, anstatt sich beim Streaming zu entfalten – das Ergebnis bleibt so sichtbar; klicken Sie auf einen Block, um den vollständigen Trace zu lesen.
- Exportierte PDFs und Word-Dateien sind für Chinesisch korrekt gesetzt. Der PDF-Export bettet nun eine echte CJK-Schriftart ein, anstatt auf eine zu verweisen – das behebt zusammengefallene Abstände in englischem Text und Aufzählungszeichen, die als unzusammenhängende chinesische Zeichen dargestellt wurden; außerdem funktioniert Fettschrift jetzt. Word-Exporte deklarieren eine ostasiatische Schriftart, sodass gemischter chinesisch/englischer Fetttext nicht mehr halb fett erscheint, und beide Formate verwenden eine fünfstufige Größenskala, die Überschriften innerhalb einer Antwort der eigenen Struktur des Transkripts unterordnet.
- Agenten bleiben bei langen Aufgaben auf Kurs. Der Agent wird nun daran erinnert, den Ansatz zu wechseln, wenn er dasselbe Tool wiederholt erfolglos einsetzt, wird aufgefordert, einen Plan zu schreiben, wenn er ohne einen arbeitet, und kann keine endgültige Antwort liefern, solange Planpunkte noch offen sind, ohne einen expliziten Verifikationsdurchlauf.
- Gestreamte Antworten blenden sich ein, anstatt abrupt zu erscheinen. Neu eingetroffene Blöcke werden beim Streaming kurz eingeblendet, wobei die Einstellung für reduzierte Bewegung des Nutzers berücksichtigt wird. Lange Tabellen heben außerdem die Zeile unter dem Cursor hervor, und Listenaufzählungszeichen liegen hinter dem Text, anstatt mit ihm zu konkurrieren.
- Block-Aktionen bleiben unauffällig, bis Sie danach greifen. Kopieren und Herunterladen bei Antworten, Code-Blöcken, Diagrammen und Tabellen sind nur als Symbole mit Tooltips dargestellt (Herunterladen immer ganz rechts), werden beim Hover eingeblendet und sind per Tastatur erreichbar.
- Die Seitenleiste hält Chats zusammen. Die Gesprächsliste befindet sich direkt unter „Neuer Chat” und „Suche”, und die Modulnavigation wurde in ein kompaktes, getöntes Dock oberhalb des Benutzerbereichs verschoben – das gibt der Liste mehr Platz und der Seitenleiste eine klare Hierarchie von oben nach unten.
- Reasoning ist standardmäßig eingeklappt. Denkabschnitte in laufenden und vergangenen Gesprächen werden auf eine einzeilige Vorschau reduziert und lassen sich per Klick erweitern; Reasoning wird beim Generieren weiterhin offen gestreamt und klappt sich zusammen, wenn der Schritt abgeschlossen ist.
- Listenseiten blenden ihre Karten sanft ein. Agenten, Connectors, Wissensdatenbanken, Skills, Workflows, Tools, Gespräche, Artefakte und der Marktplatz staffeln ihre Karten beim ersten Laden ein, anstatt alle auf einmal zu erscheinen. Filtern und Blättern bleiben sofort, sodass das Tippen in einem Suchfeld die Einblendung nie wiederholt.
Sicherheit
- Rohes HTML in gerendertem Markdown wird jetzt bereinigt. Modellausgaben und hochgeladene Markdown-Dateien werden vor der Anzeige bereinigt, sodass eingeschleuste Skripte, Event-Handler, iframes, Formulare und Style-Overrides die Seite nicht mehr erreichen können. Mathematische Formeln, Syntax-Highlighting, Tabellen, Aufgabenlisten und Disclosure-Blöcke sind davon nicht betroffen. Rohes inline
<svg>wird nicht mehr gerendert; verwenden Sie stattdessen einensvg-Codeblock.
Behoben
-
GPT-5.x-Agenten führen Tools mit aktiviertem Reasoning aus, anstatt einen Fehler zu werfen. GPT-5.x-Modelle durchlaufen nun zuerst die Responses API, wo Funktions-Tools und Reasoning zusammenarbeiten; Endpunkte ohne eine
/v1/responses-Route fallen automatisch auf Chat Completions zurück, wo GPT-5.x-Tool-Aufrufe Reasoning explizit deaktivieren, da diese API dies erfordert. Andere Modellfamilien auf OpenAI-kompatiblen Endpunkten behalten ihren bestehenden Chat-Completions-Pfad. - Ask-first-Anfragen werden im Planner-Modus in einem Durchlauf abgeschlossen. Ein Ziel, das den Agenten explizit auffordert, Anforderungen mit Multiple-Choice-Fragen zu klären, bevor er liefert, erzeugt nun einen sauberen Fragebogen als Ergebnis des Durchlaufs, anstatt Planungsschritte zu erstellen, die auf Antworten warten, durch Neuplanungen zu schleifen und mit „Ziel nicht erreicht” sowie wiederholten Fragenlisten zu enden. Der Auto-Modus leitet solche Anfragen an den Standard-Modus weiter.
- Follow-up-Chips ziehen das Transkript nicht mehr über die Antwort hinaus. Nachdem ein Durchlauf beim Ergebnis anhält, bleibt späteres Layout-Wachstum (Vorschläge, Titel) an Ort und Stelle, und das Einfalten des laufenden Durchlaufs in den Verlauf parkt für dasselbe Gespräch erneut am Antwortkopf, anstatt zum Ende zu springen.
- Das Öffnen eines bestehenden Gesprächs landet bei den neuesten Nachrichten. Das Aktualisieren einer Chat-URL scrollt nun wie das Wechseln über die Seitenleiste zum Ende, anstatt oben im Thread zu beginnen.
- Schnelle Antworten sehen nicht mehr wie bei „Verarbeitung…” feststeckend aus. Ein abgeschlossener Durchlauf ohne generierten Schritttitel zeigt die Denkprozess-Beschriftung anstelle des Live-Verarbeitungs-Shimmer-Textes.
- Animationen folgen nun der Systemeinstellung „Bewegung reduzieren”. Der driftende Gradient des Login-Hintergrunds, der Hero-Eingang, der atmende injizierte Nachrichtentext und der Streaming-Cursor bewegten sich unabhängig von der Betriebssystemeinstellung weiter. Sie halten nun still, während die Indikatoren, die laufende Arbeit anzeigen, sichtbar bleiben, damit die Oberfläche nie blockiert wirkt.
- Der Ausführungsmodus-Selektor bleibt geschlossen, während ein Durchlauf läuft. Der Chip war ausgegraut, öffnete aber beim Klicken trotzdem sein Menü, anders als der daneben liegende Agenten-Selektor; beide sind nun inaktiv, bis der Durchlauf abgeschlossen ist.
- Reasoning-Streams laufen bei neueren Modellen wieder live. Live-Reasoning war an eine fest kodierte Liste von Modellnamen gebunden, sodass alles, was nach dem Erstellen dieser Liste veröffentlicht wurde, einen Spinner anzeigte und dann den gesamten Reasoning-Block auf einmal ausgab. Jedes Modell, das Reasoning ausgibt, streamt es nun.
- Die Chat-Ansicht hält mit schneller Ausgabe Schritt und landet bei der Antwort. Sie bleibt nicht mehr mitten im Reasoning stecken und meldet fälschlicherweise neuen Inhalt darunter, sie folgt Inhalt, der ohne neue Ereignisse wächst, und wenn ein Durchlauf endet, setzt sie sich oben am Ergebnis ab, nicht unten. Das Wegscrollenübergibt die Kontrolle weiterhin zurück, und die Rückkehr zum Ende setzt das Folgen fort.
- Eine kurze Antwort bleibt nach dem Ende des Durchlaufs dort, wo Sie sie gelesen haben. Sobald ein Durchlauf abgeschlossen war, glitt das Transkript nach unten, sodass die Frage und ihre Antwort am Eingabefeld hingen; die Antwort hält nun ihre Position oben in der Ansicht, bis die nächste Nachricht gesendet wird.
- Die Anmeldung wendet die bevorzugte Sprache des Kontos sofort an. Der Locale-Cookie wird nun beim Login und OAuth-Callback synchronisiert, und die Zielseite wird neu geladen, wenn die Sprache des Kontos von der Sprache abweicht, in der die Login-Seite gerendert wurde, sodass das Ziel nicht mehr in der vorherigen Sprache erscheint, bis zum nächsten Neuladen.
- Cmd+K öffnet die Suche auch bei eingeklappter Seitenleiste. Der Shortcut-Listener blieb aktiv, aber sein Dialog wurde im eingeklappten Zustand nie eingebunden, sodass der Shortcut stillschweigend nichts tat.
- Zitate benennen wieder das Dokument, aus dem sie stammen. Im einfachen Abrufmodus war jede Quelle mit „Wissensdatenbank” beschriftet, weil das Abruf-Tool den ursprünglichen Dateinamen wegließ; es meldet nun die Quelle, was dem entspricht, was die Grounding-Pipeline bereits tat.
- Lange Gespräche treffen seltener auf harte Kontext-Überlauf-Fehler. Die Komprimierung wird nun mit einem Sicherheitsabstand unterhalb des Eingabelimits des Modells ausgelöst, anstatt genau darauf, und beim Start wird eine Warnung protokolliert, wenn das Fenster des schnellen Modells zu klein ist, um das Kontextbudget des allgemeinen Modells zu halten.
- SVG-Abbildungen bleiben im Dunkelmodus lesbar. Modell-erstellte SVGs setzen eine helle Leinwand voraus, daher werden Abbildungen auf einer festen hellen Oberfläche gezeichnet, anstatt dunkel-auf-dunkel zu werden.
- Der Browser-Tab-Beschäftigungsindikator verschwindet nicht mehr mitten im Durchlauf. Während ein Durchlauf läuft, behält das Tab-Symbol das App-Zeichen und lässt es zwischen voller Farbe und Grau pulsieren, hält für den gesamten Durchlauf und stellt das echte Symbol zuverlässig wieder her, wenn der Durchlauf endet, auch nach der In-App-Navigation. Bei aktivierter reduzierter Bewegung wird ein statisches graues Zeichen anstelle einer Animation angezeigt.
- Agenten rufen einen Endpunkt nach einem abgeschnittenen Ergebnis nicht mehr dutzende Male erneut ab. Kürzungshinweise beginnen nun mit einem imperativen Verweis auf die gespeicherte vollständige Kopie, und ein Agent, der denselben Endpunkt mit variierenden Parametern wiederholt aufruft, wird gewarnt und dann hart gestoppt.
- Ein abgestürzter Durchlauf meldet nun einen Fehler anstelle eines grünen „Fertig”. Wenn der Agent aufgrund eines internen Fehlers gestoppt wurde, wurde der rohe Ausnahmetext als Antwort unter einem Erfolgs-Häkchen geliefert; Fehler werden nun über den Fehlerkanal geleitet und als Fehlerbenachrichtigung angezeigt.
- Die Wiederverbindung mit einem Stream wiederholt keine bereits gesehene Ausgabe mehr. Der Live-Stream trägt nun denselben Positionscursor wie der Resume-Endpunkt, sodass nach einer unterbrochenen Verbindung nur die verpassten Ereignisse wiederholt werden, anstatt des gesamten Durchlaufs.
- Gestreamte Ereignisse, die über Netzwerk-Chunks aufgeteilt sind, gehen nicht mehr verloren. Ein fortgesetzter Stream konnte ein Ereignis verlieren, dessen Frame in zwei Teilen ankam; beide Stream-Pfade teilen nun einen Parser, der beliebige Chunk-Grenzen verarbeitet.
- Der Aufruf eines anderen Agenten gibt dessen tatsächliche Antwort zurück. Die Antwort des Unteragenten kam früher in einem rohen Ausführungs-Trace vergraben an und überschwemmte den Kontext des aufrufenden Agenten; er erhält nun nur noch die Antwort.
- Ein hängendes Tool kann einen Durchlauf nicht mehr auf unbestimmte Zeit blockieren. Jeder Tool-Aufruf hat nun ein Wanduhr-Zeitlimit (Standard 180s), sodass ein blockierter Connector oder ein nicht reagierender Server den Schritt mit einer klaren Meldung beendet, anstatt den Durchlauf zu blockieren.
- Ein Agent, der denselben Tool-Aufruf wiederholt, wird nun frühzeitig gestoppt. Identische wiederholte Aufrufe werden nach einigen Versuchen abgelehnt, anstatt das gesamte Iterationsbudget zu verbrauchen.
- Lange Gespräche verlieren nach der Komprimierung nicht mehr ihren früheren Kontext. Die Zusammenfassung, die ältere Durchläufe kondensiert, wurde beim nächsten Durchlauf stillschweigend verworfen; sie wird nun weitergetragen, sodass der Agent behält, was zuvor besprochen wurde.
- Große Tool-Ergebnisse behalten sowohl ihr Ende als auch ihren Anfang. Wenn ein langes Ergebnis gekürzt wird, um in das Kontextfenster zu passen, werden nun beide Enden beibehalten (das Ende der Ausgabe eines Befehls ist meist am wichtigsten), die Kürzung berücksichtigt nicht-lateinischen Text korrekt, und spätere Ergebnisse erhalten ein garantiertes Minimalfenster, anstatt vollständig ausgeblendet zu werden.
- Dieselbe generierte Datei erscheint nicht mehr als zwei Downloads. Eine gerenderte HTML-Ausgabe, die erneut unter einem echten Dateinamen gespeichert wurde, erzeugte früher zwei Lieferkarten mit identischem Inhalt; Duplikate werden nun anhand des Inhalts erkannt und in die spezifisch benannte Datei zusammengeführt.
- Interne Offload-Dateien können nicht mehr als herunterladbare Lieferobjekte erscheinen. Da Tools ein gemeinsames Dateisystem nutzen, konnte eine große Tool-Ausgabe, die während eines Code-Ausführungslaufs ausgelagert wurde, vom Artefakt-Scan aufgegriffen und als falscher Download-Karte angezeigt werden. Laufzeit-Buchhaltungsdateien werden nun von der Artefakterkennung ausgeschlossen.
-
Jedes Tool in einem Gespräch arbeitet nun auf einem gemeinsamen Dateisystem. Ausgelagerte große Ausgaben landeten früher in einem Verzeichnis, das nur die Workspace-lesenden Tools sehen konnten, während
file_ops,shell_execundpython_execanderswo operierten — der Agent listete eine Datei auf, wurde dann informiert, dass sie nicht existiert, und verbrauchte sein Iterationsbudget bei der Suche. Ausgelagerte Dateien befinden sich nun in der Gesprächs-Sandbox, die jedes Tool (einschließlich Exec-Container) einbindet; Dateien aus älteren Gesprächen bleiben lesbar. - Das Lesen einer großen ausgelagerten Datei erzeugt keine endlose Kette von Pointer-Dateien mehr. Die Ausgabe eines Workspace-Lesevorgangs konnte selbst den Auslagerungsschwellenwert überschreiten und als neue Datei gespeichert werden, die auf bereits auf der Festplatte vorhandene Inhalte verweist, und den Agenten im Kreis schicken. Workspace-Lesevorgänge werden nun mit einer exakten Fortsetzungszeile begrenzt, anstatt erneut ausgelagert zu werden.
-
DeepSeeks improvisierter Tool-Call-Text leckt nicht mehr in Antworten. Wenn ein DeepSeek-Modell einen Tool-Aufruf als einfachen
<||DSML||Tool call: ...-Text schrieb, anstatt den Funktionsaufruf-Kanal zu verwenden, erreichte das rohe Markup den Chat wörtlich. Es wird nun wie andere Tool-Call-Pseudo-Protokolle entfernt. - Ein vom Ausgabelimit des Modells abgeschnittener Tool-Aufruf wird nicht mehr als abgeschlossene Arbeit durchgelassen. Wenn eine lange Nutzlast (z. B. das Schreiben einer vollständigen HTML-Seite) das Ausgabebudget mitten im Aufruf erschöpfte, wurde der halb geschriebene Aufruf stillschweigend verworfen und der einleitende Text des Agenten — „jetzt speichere ich die Datei” — wurde zum Schrittergebnis, sodass ein Schritt, der nichts produzierte, als abgeschlossen gemeldet wurde. Die Kürzung wird nun erkannt, und der Agent wird aufgefordert, es mit in kleinere Aufrufe aufgeteilter Arbeit erneut zu versuchen.
-
Ein Ziel, das der Agent sicher verfehlt hat, wird nun erneut versucht, anstatt den Durchlauf zu beenden. Die Neuplanung stoppte immer dann, wenn der Analysator sicher war, was ein sicheres „das Lieferobjekt fehlt” als Grund zum Aufgeben las — genau der Fall, für den die Neuplanung existiert. Durchläufe stoppen nun nur noch frühzeitig, wenn das Ziel als wirklich unerreichbar eingestuft wird, und
DAG_MAX_REPLAN_ROUNDSbegrenzt den Rest. - Die Selbstprüfung des Agenten erscheint nicht mehr als Antwort. Nach der Verwendung mehrerer Tools führt der Agent eine einmalige interne Überprüfung durch, bevor er antwortet; diese Überprüfung wurde Ihnen wörtlich gestreamt, sodass Antworten als „Lass mich überprüfen: 1. Vollständig beantwortet? ✅ …” ankamen, anstatt als die eigentliche Antwort. Die Prüfung ist nun intern, und die Antwort, die Sie sehen, wird als eigener Schritt verfasst.
-
Die Refresh-Token-Rotation macht das vorherige Token nun tatsächlich ungültig. JWT
exphat nur Sekundengenauigkeit, sodass zwei für denselben Benutzer in derselben Sekunde ausgestellte Refresh-Tokens identisch kodiert wurden — die Rotation überschrieb dann den gespeicherten Hash mit demselben Wert, und ein gestohlenes Refresh-Token konnte unbegrenzt erneuert werden. Jedes Refresh-Token trägt nun ein eindeutigesjti, sodass das rotierte Token abweicht und das alte sofort aufhört zu funktionieren. - **Approval-Gates greifen
Entfernt
-
README-Sternverlaufdiagramm und der zugehörige Aktualisierungs-Workflow. Nachdem GitHub die Stargazers-API eingeschränkt hat (Juli 2026), erforderte das Betreiben eines eigenen Diagramms ein langlebiges Admin-PAT, das immer wieder ablief und den geplanten Job zum Scheitern brachte. Das Diagramm, die SVG-Assets, das Generator-Skript und der
Star History-GitHub-Actions-Workflow wurden entfernt. - Wissensdatenbanken, die zuvor für eine Organisation freigegeben wurden, werden beim Upgrade zurückgezogen. Die v0.8.9-Ausnahmeregelung, die bereits veröffentlichte Wissensdatenbanken für ihre Abonnenten erreichbar hielt, wurde entfernt: Jede freigegebene Wissensdatenbank wird auf „persönlich” zurückgesetzt, ihre Abonnements werden gelöscht, und die verbleibende Aktion zum Aufheben der Veröffentlichung sowie die abonnentenseitigen Wissensdatenbank-Badges verschwinden. Eine Wissensdatenbank erreicht andere Nutzer nun ausschließlich über einen freigegebenen Agenten, der die Inhalte des Eigentümers zur Laufzeit delegiert.
[v0.8.9] - 2026-07-08
Hinzugefügt
- Skills und Workflows sind jetzt optionale Module und standardmäßig deaktiviert. Bei einer Neuinstallation startet das System nur mit dem Kern (Chat, Agents, Wissensdatenbanken, Connectors); ein Administrator aktiviert Skills und/oder Workflows unter Admin → Einstellungen → Module. Solange ein Modul deaktiviert ist, wird es in der Navigation ausgeblendet, und seine Seiten, APIs, Market-Einträge sowie Trigger sind nicht verfügbar — es werden keine Daten gelöscht, und alles kehrt zurück, sobald das Modul wieder eingeschaltet wird.
- DAG-Neuplanungen wiederholen keine abgeschlossenen Schritte mehr, und unterbrochene Ausführungen werden dort fortgesetzt, wo sie aufgehört haben. Wenn ein Plan überarbeitet werden muss, werden bereits abgeschlossene Schritte mitsamt ihren Ergebnissen in den neuen Plan übernommen — nur die verbleibende Arbeit wird neu geplant und ausgeführt. Der Fortschritt der Schritte wird außerdem laufend gespeichert, sodass beim Wiederaufnehmen einer unterbrochenen Ausführung (Absturz, Deployment, Verbindungsabbruch) dieselbe Anfrage ab den abgeschlossenen Schritten fortgesetzt wird, anstatt von vorne zu beginnen.
-
Langsame Tools können jetzt im Hintergrund ausgeführt werden, ohne den Agent zu blockieren. Die Sandbox-Codeausführung (Python/Shell/Node.js) bietet eine
run_in_background-Option: Der Agent erhält sofort eine Task-ID, arbeitet weiter an anderen Schritten und erhält das Ergebnis als Benachrichtigung, sobald das Tool fertig ist. Versucht der Agent, die Ausführung abzuschließen, während noch Tasks laufen, wartet er (begrenzt) auf deren Abschluss und bezieht ihre Ergebnisse in die Antwort ein. - Der Gesprächsverlauf wird vor der Komprimierung gespeichert, und durch das Token-Budget abgeschnittene Tool-Ergebnisse werden im Workspace gesichert. Bevor die Komprimierung langer Gespräche den Verlauf durch eine Zusammenfassung ersetzt, wird das vollständige Transkript als JSONL-Datei im Gesprächs-Workspace gespeichert. Ebenso wird ein durch das aggregierte Token-Budget gekürztes Tool-Ergebnis vollständig im Workspace gesichert, mit einem Verweis an der ursprünglichen Stelle — in beiden Fällen können der Agent (und Sie) das Original nachlesen, anstatt es zu verlieren.
- Antworten enden nicht mehr mitten im Satz, wenn das Modell sein Ausgabelimit erreicht. Wird eine Antwort durch das Output-Token-Limit des Anbieters abgeschnitten, fordert der Agent das Modell automatisch auf, dort fortzufahren, wo es aufgehört hat (bis zu 3 Runden), und fügt die Segmente zu einer nahtlosen Antwort zusammen — sowohl im Reasoning-Loop als auch in der gestreamten Abschlussantwort.
-
LLM-Aufrufe werden jetzt bei Anbieter-Überlastung (HTTP 529) und Gateway-Timeout (504) wiederholt und berücksichtigen
Retry-After. Bisher schlug ein 529-Fehler von Anthropic die Anfrage sofort fehl, sofern kein Fallback-Modell konfiguriert war; jetzt wird wie bei 429/5xx zurückgewartet und erneut versucht, wobei genau so lange gewartet wird, wie der Anbieter imRetry-After-Header angibt. -
Agents behalten jetzt einen sichtbaren Plan bei mehrstufigen Aufgaben. ReAct-Agents erhalten ein
update_plan-Tool, um ihren Plan als Todo-Checkliste festzuhalten und ihn während der Ausführung zu aktualisieren. Wird der Plan über mehrere Tool-Aufrufe hinweg veraltet, wird die vollständige Checkliste erneut als Erinnerung eingeblendet — so bleiben auch lange Aufgaben nach einer Kontextkomprimierung auf Kurs. Standardmäßig aktiviert (REACT_PLAN_TOOL_ENABLED); DAG-Teilschritte und Tool-lose Agents überspringen dies. -
Agents können jetzt einen Workflow mitten im Gespräch ausführen. Aktive Workflows ohne menschliche Genehmigung, die Sie besitzen oder abonniert haben, werden dem Agent als
run_workflow-Tool angeboten — sowohl im normalen Chat als auch bei ausgewähltem Agent — sodass eine Aufgabe einen deterministischen, wiederholbaren Teilprozess an einen Workflow übergeben und dessen Ausgaben zurückerhalten kann. Jede solche Ausführung wird in der Ausführungshistorie des Workflows erfasst, und der Token-Verbrauch wird auf das Kontingent des Workflow-Eigentümers angerechnet (die Ausführung wird abgelehnt, wenn der Eigentümer sein Kontingent bereits überschritten hat). Workflows mit einem Human-Intervention-Schritt bleiben auf die Auslösung beschränkt (über die Workflows-Seite oder ihren API-Key), da sie lange blockieren können. - Zwei neue Workflow-Starter-Vorlagen: Connector Action und MCP Tool Call. Die Galerie „Aus Vorlage erstellen” präsentiert jetzt die Connector- und MCP-Knoten — rufen Sie ein externes System oder ein MCP-Tool auf und fassen Sie das Ergebnis mit einem LLM zusammen. Den spezifischen Connector/Server wählen Sie nach der Erstellung aus.
Geändert
- Wissensdatenbanken können nicht mehr geteilt werden. Das Veröffentlichen einer Wissensdatenbank für eine Organisation oder den Marktplatz wurde entfernt; eine Wissensdatenbank erreicht andere Personen nur, indem sie an einen geteilten Agenten gebunden wird, der den Inhalt des Eigentümers zur Laufzeit delegiert. Bereits veröffentlichte Wissensdatenbanken bleiben für ihre aktuellen Abonnenten erreichbar und können über ihr Menü wieder auf „Persönlich” zurückgesetzt werden.
- Connectors und MCP-Server teilen die Anmeldedaten des Eigentümers nicht mehr standardmäßig (Breaking Change). „Fallback auf die Anmeldedaten des Eigentümers zulassen” ist jetzt optional: Neue Connectors/MCP-Server werden mit deaktivierter Option erstellt, und alle bestehenden wurden ebenfalls deaktiviert. Ein Abonnent, der sich auf das Token des Eigentümers verlassen hat, um einen geteilten Connector oder MCP-Server zu nutzen, muss nun eigene Anmeldedaten hinterlegen, oder der Eigentümer muss den Fallback für diese Ressource erneut aktivieren. Eigentümer können ihre eigenen Anmeldedaten unabhängig von der Einstellung stets verwenden. Infolgedessen wird ein Connector, dessen Fallback deaktiviert ist und für den keine eigenen Anmeldedaten vorliegen, nun aus dem Toolset des Agenten ausgeblendet (entsprechend dem bisherigen Verhalten von MCP-Servern), anstatt angeboten zu werden und beim Aufruf zu scheitern.
- Neue Agenten verwenden standardmäßig ReAct-Ausführung statt Auto. Der Auto-Modus führte pro Anfrage einen zusätzlichen Klassifizierungsaufruf über das schnelle Modell durch, um zwischen ReAct und DAG zu entscheiden; neue Agenten (sowie die integrierten Vorlagen und Marktplatz-Vorlagen) verwenden nun standardmäßig ReAct, wodurch diese Latenz und die Kosten pro Nachricht entfallen. Auto und DAG bleiben pro Agent wählbar; bestehende Agenten behalten ihren aktuellen Modus.
- Die KI-Agentenerstellung erholt sich von einem schwachen schnellen Modell. Das Erstellen oder Verfeinern eines Agenten aus einer natürlichsprachlichen Anweisung läuft auf dem schnellen Modell; wenn dieses keine gültige Konfiguration erzeugen kann, wird die Anfrage nun einmalig auf dem stärkeren Allgemeinmodell wiederholt, bevor ein Fehler ausgegeben wird – ein zu schwaches schnelles Modell führt damit nicht mehr zu einem sichtbaren Fehler für den Benutzer.
Entfernt
- Der visuelle Workflow-Builder wurde auf 9 Kernknotentypen reduziert. Sechzehn selten genutzte Hilfs- und Steuerflussknoten — Umgebungsvariablen, HTTP-Anfragen, Code-Ausführung, Iterator/Schleife, Teilworkflow, Template-/Listen-/Transformationshelfer sowie Parameter-/Frage-Extraktoren und Klassifikatoren — wurden entfernt, damit sich der Builder auf die Orchestrierung von Agents, Connectors, MCP-Servern und Wissensdatenbanken konzentriert. Als Nebeneffekt enthält ein geteilter Workflow keine eingebetteten Secrets mehr: Er ist nun ein reiner Referenzgraph, und jede referenzierte Ressource erzwingt zur Laufzeit ihre eigene benutzerspezifische Zugriffskontrolle. Bestehende Workflows, die auf einem entfernten Knoten basieren, müssen mit den verbleibenden Knotentypen neu erstellt werden.
Sicherheit
- API-Key-Scopes werden jetzt pro Anfrage übertragen, anstatt am Benutzerobjekt zu hängen. Damit wird ein latenter Scope-Verwechslungspfad geschlossen, bei dem ein gecachter oder über eine Identity-Map geteilter Benutzer den Scope-Satz eines anderen Auth-Kontexts erben konnte.
- Eine automatisch erstellte
.env-Datei mit dem generierten JWT-Secret wird jetzt mit Nur-Eigentümer-Berechtigungen (0600) geschrieben. Bereits vorhandene.env-Dateien behalten ihre Berechtigungen. - Die Kosten für das Passwort-Hashing sind jetzt über
FIM_BCRYPT_COSTkonfigurierbar (Standard 12, begrenzt auf den bcrypt-Bereich 4–31), damit Betreiber Hardware- und Härtungsanforderungen abwägen können. - Datenbank-Connectoren können nicht mehr geteilt werden, und ihr Raw-SQL-Tool ist auf den Eigentümer beschränkt. Das Veröffentlichen eines Datenbank-Connectors für eine Organisation oder global wird jetzt abgelehnt, und das beliebige SQL-Datenbank-Tool wird ausschließlich dem Eigentümer des Connectors angeboten — niemals einem Abonnenten, unabhängig von der Einstellung für den Eigentümer-Credential-Fallback. Bisher stellte ein geteilter Datenbank-Connector uneingeschränktes SQL über das (typischerweise hochprivilegierte) Datenbankkonto des Eigentümers für alle Abonnenten bereit, ohne benutzerbezogenes Scoping. Benutzerbezogener Datenbankzugriff wird über eine zukünftige deklarative Aktionsschicht zurückkehren.
- Webhook- und Cron-ausgelöste Workflows werden jetzt auf das Token-Kontingent des Eigentümers angerechnet. Ein unbeaufsichtigter Workflow-Lauf — ausgelöst über seinen öffentlichen API-Key oder nach Zeitplan — führte bisher LLM- und Agent-Schritte aus, ohne Token-Nutzung zu prüfen oder zu erfassen, ein nicht gemessener Freie-LLM-Pfad, der Kontingente vollständig umging. Solche Läufe werden jetzt vorab am Kontingent des Workflow-Eigentümers geprüft (ein öffentlicher Trigger wird abgelehnt und ein geplanter Lauf übersprungen, wenn der Eigentümer das Kontingent bereits überschritten hat), und ihre Token-Nutzung wird pro Lauf erfasst und auf dasselbe monatliche Kontingent wie der Chat angerechnet.
- Feishu-Genehmigungskarten erzwingen jetzt, wer genehmigen darf. Ein Klick auf eine Karte wird nur berücksichtigt, wenn das Feishu-Konto des Klickenden mit einem FIM One-Benutzer verknüpft ist, der gemäß der Genehmiger-Scope-Einstellung des Agenten tatsächlich zur Genehmigung berechtigt ist (der Initiator, der Agent-Eigentümer oder ein Organisationsmitglied) — dieselbe Regel, die die Portal-interne Genehmigung bereits angewendet hat. Bisher konnte jeder in der Feishu-Gruppe eine ausstehende Aktion genehmigen oder ablehnen, und die Entscheidung wurde ohne Identität erfasst.
- Feishu-Channels erfordern jetzt einen Verschlüsselungsschlüssel, und Callbacks ohne gültige Signatur werden abgelehnt. Die Callback-Signaturprüfung schlägt fehl (geschlossen), wenn kein Encrypt-Key konfiguriert ist (bisher wurden unsignierte Callbacks akzeptiert, sodass jeder, der die Callback-URL eines Channels kannte, eine Genehmigung fälschen konnte), und der verschlüsselte Event-Envelope, den Feishu bei aktivierter Verschlüsselung sendet, wird jetzt entschlüsselt. Neue und bearbeitete Feishu-Channels müssen den Encrypt-Key angeben.
- Genehmigungsanfragen werden nicht mehr an einen unbeabsichtigten Chat weitergeleitet. Wenn für einen Agenten kein Genehmigungskanal explizit konfiguriert war, konnte eine ausstehende Genehmigung an den Abschluss-Benachrichtigungskanal des Agenten oder, falls nicht vorhanden, an den ersten Kanal der Organisation weitergeleitet werden — wodurch eine Karte für sensible Aktionen einer Gruppe angezeigt wurde, die nie als Genehmiger vorgesehen war. Genehmigungen werden jetzt ausschließlich an den explizit konfigurierten Genehmigungskanal des Agenten weitergeleitet und fallen andernfalls auf die Portal-interne Genehmigung zurück.
- Geteilte MCP-Server und Wissensdatenbanken werden zur Laufzeit erneut auf Zugriff geprüft, nicht nur beim Binden. Ein MCP-Schritt in einem Workflow, ein gebundener MCP-Server eines Agenten oder eine gebundene Wissensdatenbank eines Agenten wird jetzt bei jeder Ausführung gegen den aktuellen Abonnementstatus geprüft, sodass ein durch das Verlassen einer Organisation entzogener Zugriff sofort wirksam wird, anstatt durch eine veraltete Bindung fortzubestehen.
Behoben
- OAuth-Anmeldung schlägt jetzt sofort mit einer klaren „Anbieter hat zu lange gewartet”-Meldung fehl, wenn GitHub/Google/Discord/Feishu langsam sind, anstatt bei bibliotheksinternen Standard-Timeouts hängenzubleiben und einen generischen Fehler anzuzeigen.
- Der Agent generiert keine unerwünschten Bilder mehr, wenn er gebeten wird, ein HTML-Deliverable umzugestalten, und behauptet nie, eine Datei erstellt zu haben, ohne sie tatsächlich in den Workspace zu schreiben. Die Bildgenerierung ist jetzt explizit auf Rasterbilder beschränkt, und Datei-Deliverables müssen über einen Tool-Call geschrieben werden — das Einfügen von Inhalten im Chat gilt nicht mehr als „Datei generieren”.
- Generierte HTML-Seiten verwenden jetzt standardmäßig eine warme, Claude-inspirierte Farbpalette statt des generischen Lila-Verlauf-Looks. Wenn kein Stil angegeben wird, verwendet der Agent eine warme, minimalistische Basis; der eigene Stil hat immer Vorrang, wenn er angegeben wird.
- Lange, tool-intensive Konversationen brechen nicht mehr ab, wenn der Verlauf komprimiert wird. Die Kontextkomprimierung konnte das beibehaltene Fenster zwischen einem Tool-Call und seinen Ergebnissen unterbrechen und so eine Nachrichtensequenz erzeugen, die der LLM-Anbieter direkt ablehnt (HTTP 400) — genau bei den langen Läufen, die Komprimierung am meisten benötigen. Der Kompressor hält jetzt jeden Tool-Call zusammen mit seinen Ergebnissen auf der beibehaltenen Seite.
- Ergebnisse von Hintergrund-Tools erscheinen jetzt im Step-Stream und in den DAG-Nachweisen. Ein im Hintergrund ausgeführtes Tool lieferte seine eigentliche Ausgabe früher nur innerhalb der internen Benachrichtigungsnachricht des Agents — die Step-Zeitleiste der Benutzeroberfläche und die DAG-Antwortverifizierungsnachweise sahen nur den Dispatch-Platzhalter. Das geleerte Ergebnis wird jetzt als normales Tool-Completion-Event unter dem echten Tool-Namen ausgegeben.
- Eine seltene Planer-Ausgabe mit doppelten Step-IDs lässt den gesamten DAG-Durchlauf nicht mehr fehlschlagen. Doppelte IDs wurden früher fälschlicherweise als „zirkuläre Abhängigkeit”-Fehler diagnostiziert; sie werden jetzt deterministisch umbenannt und der Plan wird fortgesetzt.
- Mehrere Korrekturen an der ReAct-Loop-Korrektheit. Ein Tool, das eine leere Ausgabe zurückgibt, behielt seinen „mit keiner Ausgabe abgeschlossen”-Hinweis anstelle eines leeren Ergebnisses, wenn der Workspace aktiviert ist; DAG-Steps, die durch eine nicht erfüllbare Abhängigkeit blockiert sind, geben jetzt ein korrektes Terminal-Event aus, anstatt die Benutzeroberfläche hängen zu lassen; und für Modelle ohne natives Tool-Calling sieht die Fallback-Antwortsynthese jetzt die Tool-Ergebnisse, nicht nur die Tool-Calls.
- Der Konversations-Workspace ist jetzt tatsächlich mit dem Chat verbunden — zu große Tool-Ergebnisse sind wiederherstellbar statt still verloren zu gehen. Die Workspace-Wiederherstellungspfade der Agent-Schicht (Large-Output-Offload mit einem
workspace://-Zeiger, Full-Copy-Rettung von budget-gekürzten Tool-Ergebnissen, Pre-Compaction-Transkript-Snapshots) existierten, aber die Chat-Endpunkte erstellten nie einen Workspace, sodass keiner davon ausgeführt wurde: Sobald das Tool-Ergebnis-Budget erschöpft war, erhielt das Modell leere Beobachtungen ohne Möglichkeit, die Daten zurückzulesen, und antwortete auf Basis von Vermutungen. ReAct- und DAG-Step-Agents erhalten jetzt einen konversationsspezifischen Workspace, und das Löschen einer Konversation bereinigt dessen Workspace-Dateien und alle verbleibenden Crash-Resume-Checkpoints. - Fortgesetzte DAG-Läufe verlieren nicht mehr das Ende langer Step-Ausgaben. Im Crash-Resume-Checkpoint gespeicherte Step-Nachweise wurden nur am Anfang auf die Größenbeschränkung gekürzt, wobei alles am Ende der Ausgabe still verworfen wurde — genau dort, wo Schlussfolgerungen, Prüfsummen und letzte Zeilen tend to be. Gekürzte Nachweise behalten jetzt sowohl den Anfang als auch das Ende mit einem expliziten Auslassungsmarker dazwischen.
- Agents „arbeiten” nicht mehr, indem sie ihre eigenen Notizen über Python ausgeben. Die Effizienzanleitung, die das Schreiben eines umfassenden Skripts pro Tool-Call empfahl, ist jetzt auf Aufgaben beschränkt, die tatsächlich Code-Ausführung benötigen — Wissensfragen, Vergleiche und Analysen, die das Modell direkt erstellen kann, werden direkt beantwortet, anstatt durch sinnlose Sandbox-Skripte geleitet zu werden.
- Ein Agent-Step innerhalb eines Workflows führt jetzt den vollständigen Agent aus, nicht nur seinen Prompt. Der Agent-Knoten eines Workflows wurde früher nur mit den Anweisungen des Agents auf einem generischen Modell und Standard-Toolset ausgeführt — die Connectors, Wissensdatenbanken, MCP-Server und das konfigurierte Modell des Agents wurden still verworfen. Er führt den Agent jetzt genau so aus, wie er es im Chat tun würde, mit allen gebundenen Ressourcen und dem Modell, und nur wenn dieser Agent für den Workflow-Eigentümer sichtbar ist.
- Das Verlassen (oder Entfernen aus) einer Organisation widerruft jetzt deren gemeinsamen Zugriff. Ressourcen, die nur über diese Organisation erreichbar waren, werden abbestellt, und die pro-Benutzer gespeicherten Connector/MCP-Anmeldedaten werden gelöscht — sodass diese Ressourcen nach dem Austritt nicht mehr genutzt oder auf die Anmeldedaten des Eigentümers zurückgegriffen werden kann. Ressourcen, die über den Market abonniert wurden, sind nicht betroffen.
- Das Löschen eines Kontos entfernt jetzt alles, konsistent. Die Admin-Pfade „Benutzer löschen” und die Self-Service-Pfade „Mein Konto löschen” divergierten früher — jeder bereinigt eine andere Menge an Dateien auf der Festplatte (und beide berechneten ihre Dateipfade falsch, sodass jeder still einige verpasste), und der Admin-Pfad ließ API-Schlüssel, Anmeldeverlauf, Eval-Daten, Call-Logs und Abonnements zurück. Beide laufen jetzt durch eine Routine, die jeden Datensatz und jede Datei entfernt, und das Löschen schlägt nicht mehr bei Datenbanken fehl, die Fremdschlüssel erzwingen.
- Ein Benutzer, der noch eine Organisation besitzt, kann nicht mehr gelöscht werden. Die Anfrage wird jetzt mit einer klaren Meldung abgelehnt, die Eigentumsübertragung (oder das Löschen der Organisation) zuerst zu verlangen, anstatt undurchsichtig fehlzuschlagen oder die Organisation verwaist zurückzulassen.
- Das Löschen eines Agents unterbricht keine vergangenen Konversationen mehr. Konversationen, die den Agent referenzierten, werden als historische Aufzeichnungen beibehalten und der Agent-Link wird einfach gelöscht, anstatt das Löschen zu blockieren.
- Connector-Aktionen, die eine Bestätigung erfordern, können in einem Workflow nicht mehr unbeaufsichtigt ausgeführt werden. Eine Connector-Aktion, die als bestätigungspflichtig markiert ist, wurde früher innerhalb eines Workflows mit still umgangenem Approval-Gate ausgeführt. Der Step schlägt jetzt mit einer Meldung fehl, einen Human-Intervention-Knoten davor zu platzieren (das workflow-native Approval-Gate) oder eine Aktion zu verwenden, die keine Bestätigung erfordert.
- Workflow-Steps leihen sich nicht mehr die MCP-Anmeldedaten des Eigentümers. Wenn der MCP-Server eines Workflows den Eigentümer-Anmeldedaten-Fallback deaktiviert hatte, fiel ein Nicht-Eigentümer, der diesen Workflow ausführte, still auf die Server-Anmeldedaten des Eigentümers zurück, anstatt gestoppt zu werden. Der Step schlägt jetzt mit einer klaren Meldung fehl, eigene Anmeldedaten zu konfigurieren, entsprechend dem Chat-Pfad.
- Connector-Aufrufe aus Workflows werden jetzt auditprotokolliert. Eine Connector-Aktion, die innerhalb eines Workflows ausgeführt wurde, hinterließ keinen Eintrag im Connector-Call-Log (nur chat-initiierte Aufrufe wurden aufgezeichnet); Workflow-Aufrufe schreiben jetzt denselben Audit-Trail.
- Es ist jetzt möglich, einen abonnierten Connector, eine Wissensdatenbank oder einen MCP-Server an einen Agent zu binden. Die Bindung erforderte früher, dass die Ressource im Besitz des Benutzers ist, sodass ein Connector, den man legitim abonniert hatte (org-geteilt oder Market-installiert), als „nicht im Besitz” abgelehnt wurde. Die Bindung folgt jetzt derselben Sichtbarkeitsregel, die der Rest der App verwendet — alles, was man besitzt oder abonniert hat, ist bindbar.
- Workflow-Steps können nur Connectors aufrufen, auf die tatsächlich Zugriff besteht. Der Connector-Step eines Workflows führte früher jeden Connector aus, dessen ID er referenzierte, solange dieser Connector existierte; er erzwingt jetzt die Sichtbarkeit des Ausführenden (im Besitz oder abonniert), sodass ein geteilter Workflow keinen Connector erreichen kann, auf den kein Zugriff besteht, nur durch Referenzierung seiner ID.
- Die Wissensdatenbank-Suche funktioniert jetzt auch für abonnierte Wissensdatenbanken, nicht nur für eigene. Die Daten einer Wissensdatenbank liegen unter dem Speicher des Eigentümers, aber ein Workflow-Wissensdatenbank-Step (und Wissensdatenbank-Chat ohne Agent) suchte früher unter dem eigenen Speicher des Aufrufers — sodass die Suche in einer geteilten Wissensdatenbank still nichts zurückgab. Der Eigentümer wird jetzt aus der Wissensdatenbank selbst aufgelöst und die Suche wird auf Zugriff geprüft (Eigentümer oder Abonnent), sodass geteilte Wissensdatenbanken Ergebnisse zurückgeben und nicht zugängliche Wissensdatenbanken nichts zurückgeben, anstatt einen verwirrenden leeren Treffer zu liefern.
- Hintergrundjobs verschwinden nicht mehr zufällig. Dokumentenaufnahme, Webhook-Zustellung, Eval-Läufe und Post-Response-Benachrichtigungen wurden als Fire-and-Forget-Tasks gestartet, die die Laufzeit nur schwach referenzierte, sodass sie unter Last mitten im Flug garbage-collected werden und still stoppen konnten. Sie werden jetzt bis zum Abschluss gehalten (und ihre Fehler protokolliert), sodass sie zuverlässig abgeschlossen werden.
- Große Datei-Uploads blockieren keine anderen Anfragen mehr. Die Textextraktion aus einer hochgeladenen PDF/DOCX lief synchron auf dem Haupt-Event-Loop und fror kurzzeitig alle gleichzeitigen Anfragen ein, während eine große Datei geparst wurde. Die Extraktion wird jetzt in einen Worker-Thread ausgelagert.
- Multi-Step-(DAG-)Antworten stellen ihre Quellen nicht mehr falsch dar. Wenn der Recherche-Step eines Plans eine Seite abrief und zusammenfasste, floss nur diese Zusammenfassung weiter — sodass eine Quelle, die 11 Elemente auflistete, in der endgültigen Antwort als 6 erscheinen konnte, oder der Schweregrad eines Elements falsch beschriftet sein konnte, und der Ziel-Evaluierungsschritt es nicht erkennen konnte, weil er die ursprüngliche Quelle nie sah. Jeder Step behält jetzt seine rohe Tool-Ausgabe als maßgebliche Quellnachweise, gegen die die abschließende Synthese und der Evaluator die Antwort prüfen, sodass Gesamtzahlen, Aufzählungen und Attribute mit dem übereinstimmen, was die Quellen tatsächlich sagten (und das Vertrauen sinkt mit einer benannten Diskrepanz, wenn sie es nicht tun).
- Der Workflow-LLM-Knoten zeigt keine Modellsteuerungen mehr an, die nicht das bedeuteten, was sie implizierten. Er hatte ein fest codiertes Modell-Dropdown, dessen Auswahl zur Laufzeit ignoriert wurde, sowie einen Fast/Main-Tier-Umschalter, der ein internes (automatisch degradierendes) Konzept offenbarte. Beides wurde entfernt — der Knoten führt jetzt immer das systemkonfigurierte Modell aus (Model Provider, mit Fallback auf
.env), auf dieselbe Weise wie der Playground es auflöst, mit einem einzeiligen Hinweis, wo das Modell konfiguriert wird. - Der Agent-Editor warnt nicht mehr vor ungespeicherten Änderungen, wenn nichts bearbeitet wurde, und das Speichern schlägt nicht mehr mit einem Approver-Scope-Fehler fehl. Das Öffnen und Verlassen eines Agents konnte einen Phantom-„Ungespeicherte Änderungen”-Dialog auslösen, und das Speichern eines Agents mit einem veralteten Approver-Scope-Wert konnte direkt abgelehnt werden — beides auf dasselbe Feld zurückzuführen, das inkonsistent gelesen wurde. Der Editor normalisiert diese Felder jetzt beim Laden, sodass die Dirty-Prüfung korrekt ist und ein veralteter gespeicherter Wert korrigiert statt zurückgegeben wird.
[v0.8.8] - 2026-06-22
Geändert
- Agenten übernehmen Fehler jetzt klarer. Wenn ein Tool-Ergebnis etwas widerspricht, was ein Agent gesagt hat, erkennt er es an und korrigiert es im selben Zug – ohne übermäßige Entschuldigungen oder selbstkritische Füllsätze.
Sicherheit
- SSRF-Bypass über IPv4-gemappte IPv6-Adressen blockiert. Eine URL, deren Host ein IPv4-gemapptes IPv6-Literal war (z. B.
http://[::ffff:169.254.169.254]/), umging die Blockliste für private IP-Adressen und konnte auf Dual-Stack-Hosts interne Dienste erreichen — einschließlich Cloud-Instanz-Metadaten. Diese Adressen werden nun entpackt und gegen die IPv4-Blockliste geprüft, wodurch die Lücke in allen SSRF-geschützten Pfaden geschlossen wird (Web-Fetch, HTTP-Tool, Connectors, RAG-Importer). - MCP SSE / Streamable-HTTP-Server-URLs werden jetzt auf SSRF validiert. Ein authentifizierter Benutzer konnte einen MCP-Server auf eine interne Adresse verweisen und beim Testen oder Verbinden des Servers eine Anfrage dorthin auslösen. Server-URLs werden nun beim Erstellen/Aktualisieren und erneut beim Verbinden validiert.
- Docker Compose PostgreSQL-Zugangsdaten sind jetzt über
POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DBüberschreibbar. Der zuvor hartcodierte Standardfim:fimwird nun zentral verwaltet (der Verbindungsstring wird aus denselben Variablen abgeleitet) und mit einem Hinweis dokumentiert, ihn vor der Datenbankexposition zu ändern — so werden standardmäßige Admin-Zugangsdaten nicht mehr versehentlich ausgeliefert.
Behoben
- LLM-Zugriff bricht nach einer Ruhephase nicht mehr ab. Der gemeinsam genutzte HTTP-Verbindungspool wurde einmalig beim Start eingerichtet und für jeden Modellaufruf wiederverwendet. Nach einer Inaktivitätsphase konnte der zugrunde liegende Client geschlossen werden, ohne dass die Anwendung davon wusste – danach schlug jeder LLM-Aufruf mit einem Verbindungsfehler fehl, bis der Dienst neu gestartet wurde. Der Pool wird nun vor jedem Aufruf neu validiert und bei Bedarf transparent neu erstellt, sodass sich der Dienst ohne Neustart selbst erholt.
- Das Senden einer Nachricht im Chat streamt jetzt sofort, anstatt zu stocken. Jeder Sendevorgang blockierte bisher auf einem vollständigen Neuladen des Gesprächsverlaufs, bevor die Antwort beginnen konnte. Dadurch wirkten längere Chats kurz eingefroren und luden bei jedem Schritt das gesamte Transkript neu. Ein abgeschlossener Schritt wird nun im Hintergrund in den Verlauf übernommen, sodass Nachrichten sofort streamen und der redundante Neuladevorgang entfällt.
- Extended Thinking funktioniert jetzt auf neueren Anthropic-Modellen (Opus 4.6+, Sonnet 4.6, Fable 5). Diese Modelle haben den alten Parameter für festes Thinking-Budget entfernt — Opus 4.7/4.8 und Fable 5 lehnen ihn mit einem 400-Fehler ab — sodass die Konfiguration des Reasoning-Aufwands entweder zu einem Fehler führte oder stillschweigend nichts bewirkte. Für diese Modelle wird nun das Adaptive-Thinking-Protokoll verwendet (und die Sampling-Parameter, die sie nicht mehr akzeptieren, werden weggelassen), sodass der Reasoning-Aufwand korrekt wirksam wird. Ein Modell, das Adaptive Thinking verwendet, aber über einen generischen OpenAI-kompatiblen Proxy verbunden ist (bei dem Thinking nicht aktiviert werden kann), gibt jetzt eine klare Warnung aus, anstatt stillschweigend zu scheitern — konfigurieren Sie es als Anthropic-Provider, um Thinking zu aktivieren.
- Force-Logout vergleicht Zeitstempel auf PostgreSQL jetzt korrekt. Die Sitzungsinvalidierungsprüfung ging davon aus, dass die gespeicherte Invalidierungszeit naives UTC sei, und erzwang dies entsprechend. Dadurch wurden Vergleiche mit tz-bewussten Nicht-UTC-Werten, die PostgreSQL zurückgeben kann, stillschweigend verfälscht. Zeitstempel werden nun durch Konvertierung auf UTC normalisiert, nicht durch Überschreiben, sodass widerrufene Tokens auf jedem Backend zuverlässig abgelehnt werden.
- Enforcement-Hooks schlagen jetzt bei Abstürzen geschlossen fehl. Ein
PRE_TOOL_USE-Hook (z. B. ein Approval-Gate), der eine Ausnahme auslöste, gab bisherallow=Truezurück, sodass der blockierte Tool-Aufruf trotzdem fortgesetzt wurde — ein abstürzender Gate wurde stillschweigend zu einem Bypass. PRE-Hooks verweigern nun standardmäßig bei Fehlern; Nicht-Enforcement-Hooks (Rate-Limiter, Logger) behalten das alte Fail-Open-Verhalten über ein neuesfail_open-Flag. - Agent-Antworten verwerfen die Schlussfolgerungen des Reasonings nicht mehr. Wenn ein Reasoning-Modell bereits eine endgültige Antwort produziert hatte, führte die Pipeline einen zweiten, verlustbehafteten Syntheseaufruf durch, der die eigenen Schlussfolgerungen des Modells verwerfen konnte — und Reasoning-Details gingen zusätzlich verloren, wenn Gespräche komprimiert, gegen das Kontextlimit abgesichert oder durch mehrstufige Pläne geleitet wurden. Die Schleife streamt nun die echte endgültige Antwort wortgetreu, und das Reasoning wird durch Komprimierung, Kontext-Rebuilds und Sub-Agent-Schritte durchgereicht, sodass die angezeigte Antwort die vollständige Gedankenkette widerspiegelt und keine verwässerte Umformulierung ist.
[v0.8.7] - 2026-06-10
Sicherheit
- Eine Zwei-Faktor-Authentifizierungs-Umgehung wurde geschlossen. API- und Chat/SSE-Authentifizierung erfordern nun ein echtes Access-Token (SSE-Streaming akzeptiert zusätzlich sein kurzlebiges Ticket); das 2FA-Temp-Token, Refresh-Tokens und Bind/SSE-Tickets — alle mit demselben Schlüssel signiert — können nicht mehr zur Authentifizierung wiedereingespielt werden, sodass ein gestohlenes Passwort allein den zweiten Faktor nicht mehr umgehen kann.
- OAuth-Login verknüpft sich nicht mehr automatisch mit einem bestehenden Konto bei einer nicht verifizierten E-Mail-Adresse. Ein Drittanbieter-Konto wird einem lokalen Konto per E-Mail nur dann zugeordnet, wenn der Anbieter diese E-Mail als verifiziert markiert, was eine Übernahme über eine vom Angreifer kontrollierte, nicht verifizierte Adresse verhindert.
Hinzugefügt
file_ops.apply_patch— V4A-Format-Diff-Patches auf Dateien anwenden. Ermöglicht Agenten mehrzeilige Bearbeitungen mit zeilenbasierten Hunks und unscharfem Whitespace-Abgleich — eine Ergänzung zum bestehendenfind_replacefür Fälle, in denen exakte Teilstring-Übereinstimmungen fehleranfällig sind.- Content-Guardrails für die Validierung von Ein- und Ausgaben. Eine neue
core/agent/guardrail-Schicht läuft parallel zu (und ersetzt nicht) den bestehenden Tool-Berechtigungs-Gates und Sicherheitsprüfungen. Eingabe-Guardrails (Standard: Jailbreak-Phrasen-Detektor) werden vor jedem LLM-Aufruf ausgeführt und brechen den Vorgang ab, wenn sie ausgelöst werden — das spart Tokens und zeigt einen klaren „Blockiert”-Hinweis im Chat an. Ausgabe-Guardrails laufen nach der endgültigen Antwort. Konfigurierbar über die UmgebungsvariablenFIM_GUARDRAILS_INPUT/FIM_GUARDRAILS_OUTPUT; eine agentenbezogene UI-Konfiguration folgt in einem zukünftigen Release.
Geändert
/settings?tab=billingwird jetzt in voller Breite gerendert und ist visuell konsistent mit den übrigen Einstellungs-Tabs. Diemax-w-4xl-Breitenbegrenzung und der redundante äußere Scroll-Container wurden entfernt; das Seitentitel-Icon wurde weggelassen; die Karten für Plan / Nutzung / Abonnement / Planvergleich wurden neu geschrieben und verwenden nun dasselbe schlanke Bordered-Div-Muster (kompakte Labels +tabular-nums-Zahlen) wie der Nutzungs-Tab. Das alte Layout wirkte wie eine eigenständige Seite, die versehentlich in den Einstellungsrahmen eingefügt wurde.
Behoben
- Token-Kontingent wird jetzt am Abrechnungsdatum zurückgesetzt, nicht am 1. des Monats. Die Nutzung wurde unabhängig vom Abonnementzeitpunkt immer nach Kalendermonat gezählt — bezahlende Nutzer konnten am 20. abgerechnet werden und mussten dennoch bis zum 1. auf ein neues Kontingent warten. Ein spät im Monat gestartetes Abonnement gewährte effektiv kurz darauf ein zweites volles Kontingent. Das Kontingent wird jetzt am monatlichen Jahrestag des jeweiligen Abonnements zurückgesetzt (kostenlose Nutzer werden weiterhin zum Kalendermonat zurückgesetzt). Jährlich abgerechnete Pläne werden korrekt jeden Monat aufgefüllt, nicht einmal im Jahr. Der Tab „Plan & Abrechnung”, die Nutzungskarte und der Dialog bei überschrittenem Kontingent messen die Nutzung und zeigen das Rücksetzdatum nun alle über dasselbe Zeitfenster an, sodass die angezeigte „Nutzung in diesem Zeitraum” mit dem Punkt übereinstimmt, an dem der Chat tatsächlich stoppt.
- Abonnementverlängerungen rücken den Abrechnungszeitraum jetzt vor. Bei automatischer Verlängerung blieb das angezeigte Periodenende auf dem vorherigen Zyklus eingefroren, obwohl Stripe bereits abgerechnet und das Abonnement weitergerollt hatte — der Verlängerungs-Handler las den neuen Zeitraum nur aus dem Invoice-Payload, wo er unzuverlässig ist. Er ruft nun die maßgeblichen Zeitraumgrenzen direkt von Stripe ab, sodass das Zyklusende (und der Kontingent-Reset) bei jeder Verlängerung vorrücken. Dadurch wird auch ein latentes Risiko beseitigt, bei dem das Kündigen eines solchen Abonnements das Konto sofort statt zum tatsächlichen Periodenende herabstufen konnte.
- Rohes Tool-Call-Protokoll wird nicht mehr in Agenten-Antworten durchgereicht. Wenn ein Modell einen Tool-Call als Klartext improvisiert (z. B. durch Ausgabe von
<tool_call>/<tool_response>-Blöcken — üblich, wenn es nach einem nicht verfügbaren Tool greift), konnte dieser Text — einschließlich etwaiger Base64/Datei-Dumps darin — wörtlich in der Antwort erscheinen. Alle Antwortpfade entfernen dieses Pseudo-Protokoll jetzt, und der Parser erkennt den{"name","arguments"}-Dialekt zusätzlich als echten Tool-Call, anstatt ihn durchzureichen. - Sporadische
APIConnectionError: Connection error-Häufungen während Agenten-Turns. Der gemeinsam genutzte HTTP-Verbindungspool hielt Keep-Alive-Verbindungen bis zu 30 s im Leerlauf; wenn ein vorgelagertes Relay oder NAT eine Leerlaufverbindung stillschweigend beendete, verwendete die nächste Anfrage den halb toten Socket und schlug fehl. Der Keep-Alive-Ablauf beträgt jetzt standardmäßig kurze 5 s (warme Verbindungen innerhalb eines Turns werden weiterhin wiederverwendet), und der Pool ist überLLM_HTTP_MAX_CONNECTIONS/LLM_HTTP_MAX_KEEPALIVE/LLM_HTTP_KEEPALIVE_EXPIRYkonfigurierbar — setzen SieLLM_HTTP_MAX_KEEPALIVE=0, um die Verbindungswiederverwendung hinter einem unzuverlässigen Upstream vollständig zu deaktivieren. - API-Key-Nutzungsstatistiken (
total_requests,last_used_at) werden jetzt bei jeder Anfrage gespeichert. Zuvor wurde das Inkrement in der Datenbanksitzung der Anfrage geschrieben, die nur von Endpunkten committet wird, die eigene Schreibvorgänge durchführen — rein lesende API-Key-Aufrufe (Dashboard, Dateien, Modelle, Exporte, …) setzten den Zähler daher stillschweigend zurück. Die Nutzung wird jetzt in einer unabhängigen, selbst-committenden Sitzung erfasst, die vom Anfrageerfolg entkoppelt ist.
[v0.8.6] - 2026-05-08
Hinzugefügt
- Stripe-Abrechnung — Pro-Plan-Abonnement. Neuer Tab
Plan & Billingunter/settings?tab=billingzeigt den aktuellen Plan, den monatlichen Token-Verbrauch, den Zeitraum-Reset sowie entwederUpgrade to Pro(Stripe Checkout) oderManage subscription(Customer Portal). Ein erfolgreicher Checkout öffnet ein Konfetti-Modal mit dem Namen des gekauften Plans; Redirect-Parameter werden erst nach dem Schließen entfernt, damit ein Seitenneuladen das Modal nicht erneut auslöst. Die Kontingentdurchsetzung berücksichtigt den Plan jedes Nutzers; gekündigte Abonnements bleiben bis zum Ende des bezahlten Zeitraums auf Pro; der Mid-Stream-402-Quota-Dialog leitet nun zum Abrechnungs-Tab weiter. Admins verwalten Pläne und durchsuchen Abonnements unter Admin Panel → Billing. Pro verwendet derzeit einen Stripe-Test-Modus-Preis; die Produktionsumstellung ersetzt die Preis-ID. - Admin-gesteuertes Abrechnungs-Feature-Flag. Der Schalter
Enable Stripe Billingunter Admin → System Settings steuert die gesamte Stripe-Pipeline — nutzerseitige/api/billing/*-Endpunkte, Stripe-Webhook, Admin-Plan/Abonnement-CRUD sowie der Frontend-Abrechnungs-Tab und die Admin-Navigation werden ausgeblendet oder geben 503 zurück, wenn er deaktiviert ist. Die erste Aktivierung legt Free + Pro an, setzt dendefault_plan_id-Zeiger und befülltusers.plan_idrückwirkend; nachfolgendes Deaktivieren/Aktivieren ist ein reines Flag-Umschalten. Private Deployments ohne Stripe-Zugangsdaten bleiben sauber. Die Quota-Kette fällt auf das admin-seitig eingestellteDefault Monthly Token Quotazurück, wenn die Abrechnung deaktiviert ist. - Unbegrenztes Kontingent pro Nutzer + Spalte „Registered”. Ein leeres Kontingentfeld erbt das globale Limit;
0gewährt unbegrenzten Zugriff. Bisher wurden beide Zustände gleich behandelt. Die Nutzertabelle erhält außerdem eine Spalte „Registered”. - Nicht-englische Dokumentationen (
zh/ja/ko/de/fr) zeigen jetzt die vollständigen Abschnitte API Reference und Channels Configuration — die GruppeEndpointsund die UntergruppeConfiguration > Channelswaren zuvor nur auf Englisch verfügbar.
Geändert
Plan & Billingist ein Einstellungs-Tab, keine eigenständige Seite./settings/billingwurde zurück in/settings?tab=billingintegriert, sodass die linke Navigation sichtbar bleibt, während Benutzer Pläne wechseln (entspricht GitHub / Linear / Notion). Die eigenständige Route leitet weiter, sodass alte Lesezeichen und früher bereitgestellte Stripe-Checkout-Rückgabe-URLs weiterhin funktionieren. Der TabSubscriptionswurde inMarketplaceumbenannt, um Verwechslungen mit Plan-Abonnements zu vermeiden.- Das Free-Plan-Kontingent ist auf der Admin-Seite „Plans” schreibgeschützt. Es wird aus Systemeinstellungen → Standard-Monatliches-Token-Kontingent bezogen; Änderungen dort werden automatisch übernommen. Das Backend ignoriert
monthly_token_quotabei PATCH-Anfragen für den Free-Plan stillschweigend. - Token-Kontingente werden als
5M/100Kanstelle von5,000,000auf der Abrechnungsseite, in Plan-Karten und in der Admin-Plantabelle dargestellt. Admin-Eingabefelder akzeptieren weiterhin rohe Zahlen. - Die Übersetzungshoheit wurde von einzelnen Locale-Dateien auf ein zentrales Glossar verlagert. Die Regeln befinden sich in
scripts/translation-glossary.mdund werden in jeden LLM-Übersetzungsaufruf (JSON, MDX, README) geladen. Der Pre-Commit-Hook verweigert grundsätzlich manuelle Änderungen an generierten Locale-Dateien. Um eine Fehlübersetzung zu korrigieren, das Glossar bearbeiten und mit--forceneu generieren. - Lizenzgeber und anwendbares Recht. Die FIM One Source Available License wird nun von FIM Labs Pte. Ltd. (Singapur) gewährt; das anwendbare Recht wechselt von der VR China nach Singapur; Streitigkeiten werden durch SIAC-Schiedsverfahren in Singapur beigelegt (ein Schiedsrichter, Englisch). Eine neue
NOTICE-Datei auf oberster Ebene enthält Angaben zur F&E-Zuordnung, Markenzeichen und Drittkomponenten-Richtlinien. Keine Änderungen an den Nutzungserlaubnis- oder Einschränkungsbedingungen.
Behoben
- Admin-Genehmigung/Ablehnung von Agents, Connectors, Wissensdatenbanken und MCP-Servern schlägt auf PostgreSQL nicht mehr fehl. Die
reviewed_at-Spalte der Publish-Review-Tabelle ist jetzt zeitzonenbewusst, sodass Genehmigungsschreibvorgänge auf PG erfolgreich sind (der Fehler war auf SQLite-Entwicklungsdatenbanken unsichtbar). - OAuth-Nutzer können ihre Sitzung wieder aktualisieren. Das von OAuth ausgestellte Refresh-Token wurde in einer Form gespeichert, die der Refresh-Endpunkt nie abgleichen konnte, was nach Ablauf des Access-Tokens eine erneute Anmeldung erzwang; es wird nun wie alle anderen Pfade als Digest gespeichert.
- Der Browser-Tab-Titel spiegelt jetzt den aktiven Unter-Tab in
/settingsund/adminwider (z. B.Settings · Billing — FIM One), sodass mehrere angeheftete Tabs unterscheidbar sind. - Die Nutzungsseite zeigt nicht mehr „Unlimited” an, wenn ein Admin ein Standard-Token-Kontingent festgelegt hat — sie löst nun über die einheitliche Kontingent-Kette auf (Benutzer-Override → Plan-Stufe → Systemstandard).
- Agent-Einstellungen: Gebundene Ressourcen flackern beim Öffnen nicht mehr als „(已删除)”. Das Orphan-Badge wartet, bis die Inventarabrufe abgeschlossen sind, bevor es gerendert wird.
- Toasts folgen jetzt dem Hell-/Dunkel-Theme, anstatt fest auf Dunkel kodiert zu sein.
- Die nutzungsbasierte Agent-Aufschlüsselung dupliziert keine „Direct Chat”-Zeilen mehr für Konversationen, die mit gelöschten Agents verknüpft sind.
./deploy.shfür Self-Hosting schlägt nicht mehr mitcontainer name already in usefehl — es bereinigt hash-präfixierte Zombie-Container und DooD-Sandbox-Kinder vordocker compose up.- Keine redundanten
chore(i18n): sync translations-Commits nach Pushes mehr — der Pre-Commit-Übersetzungs-Hook staged.translation-cache.jsonzusammen mit den übersetzten Dateien. - Der Agent-Chat stürzt nicht mehr ab, wenn ein bestätigungspflichtiges Tool in einer ungebundenen Agent-Sitzung ausgeführt wird — das Gate tritt graceful zurück, wenn kein Agent für das Routing vorhanden ist.
- Retry schlägt bei Anbietern mit strikter Abwechslung (Claude) nicht mehr fehl, wenn der Verlauf verwaiste Benutzernachrichten aus unterbrochenen Turns enthält — aufeinanderfolgende Nachrichten gleicher Rolle werden vor dem Versand zu einem einzigen Turn zusammengefasst.
- Playground-Retry zeigt die Anfrage während des Pre-Stream-Fensters nicht mehr kurz doppelt an.
- Der ReAct-Agent bestätigt jetzt die Ablehnung einer Genehmigungsanfrage durch einen Operator und stoppt, anstatt umformulierte Tool-Aufrufe zu wiederholen.
- Playground „Suggested follow-ups” ist zurück und jetzt pro Agent opt-in (standardmäßig deaktiviert; neuer Schalter
Follow-up Suggestionsin den Agent-Einstellungen).
[v0.8.5] - 2026-04-23
Hinzugefügt
-
Contributor-freundlicher i18n-Workflow: Mitwirkende müssen
LLM_API_KEYnicht mehr konfigurieren, um PRs einzureichen, die englische Quelldateien berühren. Wenn der lokale Pre-Commit-Übersetzungsschritt übersprungen wird (kein Schlüssel), übersetzt ein neuer.github/workflows/i18n-sync.yml-Workflow EN → ZH/JA/KO/DE/FR aufmaster, nachdem der PR gemergt wurde, und committet das Ergebnis automatisch. Der Pre-Commit-Hook verweigert nun auch manuelle Bearbeitungen generierter Locale-Dateien (mit einemALLOW_LOCALE_EDIT=1-Override für legitime Übersetzungskorrekturen) und verhindert so eine stille Abweichung zwischen EN-Quellen und übersetzten Ausgaben. -
i18n-CI-Fallback end-to-end verifiziert: Ein Smoke-Test-Push (nur EN, lokaler Übersetzungs-Hook übersprungen) bestätigte, dass der GitHub Actions-Workflow die geänderte Quelle erkennt, in alle fünf Locales übersetzt und das Ergebnis mit
[skip ci]auf master auto-committet, um Rekursion zu verhindern. - Exa-Integrationsdokumentationsseite: Dedizierter Integrations-Abschnitt in der Seitenleiste mit einer erstklassigen Exa-Seite, die die gesamte Exa-Suchoberfläche abdeckt (neural / fast / deep-reasoning / instant), Filterung, Inhaltsabruf und drei abgestimmte Presets für News-Monitoring, Recherche-Paper-Abruf und Deep-Reasoning-Agenten. Dient als Partner-seitige Zielseite für das Exa-Integrationsverzeichnis.
-
Xinchuang (信创) Datenbankunterstützung: Der Datenbank-Connector listet nun KingbaseES (人大金仓), HighGo (瀚高) und DM8 (达梦) neben PostgreSQL/MySQL auf. KingbaseES und HighGo sind PG-kompatibel und verwenden
asyncpgohne zusätzliche Abhängigkeiten; DM8 nutzt das offizielledmPython-Vendor-Wheel. Ein eigenständigesscripts/test_xinchuang_dbs.pyermöglicht es Betreibern, die Live-Konnektivität über die CLI zu überprüfen. -
Feishu Channel + Bestätigungs-Gate via IM: Der neue
Channel-Ressourcentyp (org-scoped, Anmeldedaten im Ruhezustand verschlüsselt) ermöglicht es Organisationen, eine Feishu-App für ausgehende Nachrichten zu verbinden. Tools, die mitrequires_confirmation=Truegekennzeichnet sind, senden nun eine interaktive Genehmigen/Ablehnen-Karte an die konfigurierte Feishu-Gruppe, anstatt nur den Bestätigungsdialog im Portal anzuzeigen — jedes autorisierte Mitglied der Gruppe kann direkt aus Feishu heraus genehmigen oder ablehnen. Umfasst die Verwaltungsoberfläche unter Einstellungen → Channels (Liste, Erstellen/Bearbeiten mit Dirty-State-Schutz, Details mit kopierbarer Callback-URL, Test-Senden), CRUD-API (/api/channels) und den Feishu-Event-Callback-Endpunkt (/api/channels/{id}/callback) mit Signaturverifizierung und URL-Challenge-Unterstützung. Erster Schritt des v0.9 IM-Channel-Integrations-Roadmap-Punkts, wird vor dem Zeitplan für den Roadshow am 2026-04-24 ausgeliefert. -
Agent-Hook-System (Skeleton): Die neue
PreToolUseHook/PostToolUseHook-Abstraktion insrc/fim_one/core/hooks/ermöglicht es deterministischer Logik, außerhalb der LLM-Schleife zu laufen — derFeishuGateHookist die erste konkrete Implementierung, die an den Bestätigungs-Gate-Flow angehängt ist. Vollständiger Hook-Lebenszyklus + benutzerdefinierte YAML-Hooks bleiben im v0.9-Scope. -
Hook-System ist jetzt im ReAct- und DAG-Runtime aktiv: Agenten, die
hooks.class_hooksin ihrermodel_config_jsondeklarieren, haben diese Hooks bei jeder Chat-Sitzung instanziiert und registriert. Der erste Konsument —FeishuGateHook— wird automatisch ausgelöst, wenn ein Agent ein Tool aufruft, dessen Connector-Aktion mitrequires_confirmation=Truegekennzeichnet ist, sendet eine Genehmigen/Ablehnen-Karte an die Feishu-Gruppe der Organisation, blockiert das Tool und setzt es basierend auf dem Ergebnis fort oder bricht es ab. Zuvor war die Hook-Abstraktion vorhanden, aber nichts in der Web-Schicht verband sie mit dem Live-Chat. -
Channels und die Hook-System-Architektur dokumentiert: Das neue
docs/architecture/hook-system.mdxerklärt die drei Hook-Punkte, warum Hooks außerhalb der LLM-Schleife laufen, und führt durchFeishuGateHookvon Anfang bis Ende. Bestehende Architekturseiten (system-overview, organization, react-engine, philosophy) verlinken darauf. Die README listet Messaging Channels nun als erstklassige v0.8-Fähigkeit auf, und das Application-Layer-Diagramm enthält IM-Ziele neben Portal/API/iframe. -
Hook-Genehmigungs-Playground: Das Channels-Detailblatt hat nun eine „Test Approval Flow”-Aktion, die einen sensiblen Tool-Aufruf simuliert, eine echte Bestätigungskarte an die verknüpfte Feishu-Gruppe sendet und live auf die Entscheidung des Prüfers wartet. Im Gegensatz zur bestehenden Vorschau-Schaltfläche durchläuft dies den vollständigen Produktionspfad (echter
ConfirmationRequest-Eintrag, echter Feishu-Callback, Statusübergänge), sodass Demos und Vorbereitungen vor dem Rollout denselben Code-Pfad wie ein Produktions-Hook verwenden. - Aufgabenabschluss-Benachrichtigungen pro Agent: Agenten können nun eine Zusammenfassungskarte an den Channel der Organisation (derzeit Feishu) senden, wenn eine lang laufende ReAct- oder DAG-Aufgabe abgeschlossen ist. Pro Agent konfigurierbar unter Einstellungen → Agent → Benachrichtigungen. Erster Konsument des generischen ausgehenden Benachrichtigungsmusters.
-
Konfigurierbares Bestätigungs-Gate — inline oder Channel: Jeder Agent hat nun einen „Genehmigung”-Abschnitt in den Einstellungen mit drei Routing-Modi (Auto / Nur Inline / Nur Channel), einem Genehmiger-Scope-Selektor (Initiator / Agent-Eigentümer / Jeder in der Organisation), einem „Bestätigung für jeden Tool-Aufruf erforderlich”-Override und einer expliziten Genehmigungs-Channel-Auswahl. Der Auto-Modus verwendet einen verknüpften Channel, falls vorhanden, und fällt andernfalls auf eine Inline-Genehmigungskarte im Chat-Stream zurück — sodass Agenten ohne Channel trotzdem eine echte Genehmigungs-UX erhalten, anstatt stillschweigend zu scheitern. Ein neuer
POST /api/confirmations/{id}/respond-Endpunkt teilt einen einzigen Entscheidungsaufzeichnungspfad mit dem Feishu-Webhook, sodass jede Genehmigung — ob im Chat oder in einer Feishu-Gruppe geklickt — dieselbenapprover_user_id- unddecided_at-Audit-Felder setzt.
Geändert
- Playground-Ladeanimationen verwenden jetzt einen dezenten Text-Shimmer-Effekt anstelle des unecht wirkenden Fortschrittsbalkens, der nach 8 Sekunden bei einer Pseudo-Vollbreite eingefroren ist. Die beiden vorhandenen Shimmer-Implementierungen (
.shiny-textund.text-shimmer) wurden zu einem einzigen theme-fähigen Grundelement mit einem optionalen Warm-Preset zusammengeführt. - Connector-Karten zeigen jetzt ein „Private default”-Badge (mit Tooltip) an, wenn ein Connector
allow_fallbackdeaktiviert hat, damit Eigentümer auf einen Blick erkennen können, welche Connectors erfordern, dass jeder Benutzer seine eigenen Zugangsdaten mitbringt. Der Hilfetext unter dem Allow-Fallback-Schalter im Connector-Einstellungsformular stellt außerdem klar, dass das Flag nur die Freigabe für andere Benutzer steuert – der Eigentümer kann seine eigenen Standard-Zugangsdaten unabhängig davon immer verwenden.
Behoben
- Connector-Aufrufe des Besitzers eines Connectors mit
allow_fallback=falseund nur einem Standard-Credential (kein benutzerspezifisches Credential) führen nicht mehr zu einem 401-Fehler mit „Requires authentication”. Der Besitzer ist nun vom Fallback-Gate ausgenommen — dieses Flag steuert nur, ob andere Benutzer das Standard-Credential des Besitzers verwenden dürfen. Zuvor sendeten die eigenen Agenten des Besitzers stillschweigend unauthentifizierte Anfragen; dasselbe Problem betraf auchconnector_action-Knoten in Workflows. - Der Konversationsexport zeigt nun die korrekte Modusbezeichnung („Planner” / „规划”) für automatisch geroutete DAG-Konversationen, anstatt immer „Standard” anzuzeigen.
- Export-Zeitstempel berücksichtigen nun die konfigurierte Zeitzone des Benutzers, anstatt rohe UTC-Zeiten anzuzeigen.
- Hochgeladene Dateiinhalte werden nicht mehr in exportierte Konversationen übernommen; nur der Nachrichtentext des Benutzers wird einbezogen.
- Parallele Tool-Aufrufe kollidieren nicht mehr, wenn ein Provider für jedes gestreamte Tool-Call-Delta
index=0wiederverwendet; der Aggregator erkennt nun Grenzen anhand von ID- oder Namensänderungen und ordnet nachfolgende Deltas dem richtigen Slot zu. - Einstellungen → Channels spiegelt nun die Org-Rolle des aktuellen Benutzers wider: Mitglieder (ohne Admin-/Besitzer-Rolle) sehen einen deaktivierten „New Channel”-Button, ausgeblendete Bearbeiten-/Aktivieren-Deaktivieren-/Löschen-Aktionen, ein schreibgeschütztes Banner und einen berechtigungsbewussten Leer-Zustand — anstatt eines aktivierten CTA, der beim Absenden mit „Organization admin access required” fehlschlug.
- Die Weiterleitung nach Sitzungsablauf bewahrt nun den Query-String, sodass Benutzer nach der erneuten Authentifizierung genau auf dem Tab/Filter landen, den sie zuvor betrachteten, anstatt auf dem reinen Pfad.
- Das Feishu-Channel-Formular zeigt keine falsche „Nicht gespeicherte Änderungen verwerfen”-Meldung mehr, wenn mit dem Chat-Picker interagiert wird, der über dem Dialog liegt.
- Feishu-Channel-Setup-Hinweise duplizieren keine chinesischen Labels mehr, wenn die Benutzeroberfläche bereits auf Chinesisch eingestellt ist (z. B. wurde zuvor „事件与回调 (事件与回调)” gerendert).
- „Annotate All” im Schema-Manager gibt keinen 500 Internal Server Error mehr zurück — der Backend-Pfad für die vollständige Annotierung hatte einen Fehler mit einer ungebundenen Variable, der jede Ausführung blockierte.
- Das Bearbeiten eines Datenbank-Connectors zeigt nun den
********-Platzhalter im Passwortfeld anstelle von drei maskierten Punkten, sodass klar erkennbar ist, dass das Lassen des Feldes leer das gespeicherte Passwort beibehält. - Das Aktualisieren einer Connector-Aktion klappt das Detailpanel nicht mehr zusammen — die bearbeitete Aktion bleibt ausgewählt, sodass Benutzer weiter daran iterieren können.
- Der AI-Connector-Editor unterscheidet nun zwischen Erfolg, teilweisem Fehler und vollständigem Fehler, anstatt für alle drei dieselbe „completed”-Meldung anzuzeigen. Fehlerursachen werden inline angezeigt, sodass Benutzer sehen können, was tatsächlich schiefgelaufen ist.
- Der AI-Connector-Editor kann nicht mehr stillschweigend mehrere Aktionen auf einmal löschen. Massenlöschungen (>2 Aktionen) erfordern nun ein explizites destruktives Schlüsselwort in der Anweisung des Benutzers („rebuild”, „全部重建”, „wipe” usw.); andernfalls wird die Operation mit einer klaren Fehlermeldung abgelehnt, um
requires_confirmation- / JMESPath-Einstellungen vor versehentlichem Verlust zu schützen. - Bestätigungskarten im Portal-Chat zeigen nun an, ob die Anfrage an einen Channel (z. B. Feishu) weitergeleitet oder inline bearbeitet wurde, zusammen mit einem lesbaren Hinweis darüber, wer die Genehmigung erteilen darf (der Initiator, der Agent-Besitzer oder ein beliebiges Org-Mitglied). An Channels weitergeleitete Anfragen erzeugen auch eine ausstehende Inline-Karte, sodass der Benutzer nicht im Unklaren darüber gelassen wird, ob eine Benachrichtigung tatsächlich gesendet wurde.
- Feishu-Genehmigungskarten werden nach der ersten Entscheidung schreibgeschützt: Der
/callback-Webhook gibt eine Ersatzkarte zurück, bei der die Genehmigen/Ablehnen-Buttons entfernt und der Header grün (genehmigt) oder rot (abgelehnt) eingefärbt sind, um wiederholte Klicks zu verhindern. Doppelte Klicks, die noch von veralteten Feishu-Clients eintreffen, erhalten einen „This request was already approved/rejected.”-Toast und eine aktuelle Kopie der entschiedenen Karte, damit die veraltete Ansicht aktualisiert wird. - Die einfache „Send Test Message”-Aktion in Channel-Zeilen und dem Detailblatt wurde wiederhergestellt. Der Approval Playground testet den vollständigen Hook-Roundtrip, aber ein benachrichtigungsbasierter Channel (ohne angebundenen Approval-Hook) benötigt weiterhin eine schnelle Überprüfung der Credentials/Konnektivität, die der einfache Test-Send abdeckt.
- Gleichzeitige Klicks auf dieselbe Feishu-Genehmigungskarte können nicht mehr beide erfolgreich sein. Der
/callback-Handler setzt denConfirmationRequest-Status nun über ein bedingtesUPDATE ... WHERE status='pending'und verwendet die betroffene Zeilenanzahl, um zu entscheiden, welcher Aufrufer „gewonnen” hat; zuvor konnten zwei parallele Anfragen beidependinglesen und einen Schreibvorgang in einem Race-Condition-Szenario ausführen, was potenziell zu „genehmigt-dann-abgelehnt” auf derselben Zeile führte. - Ausstehende Genehmigungsanfragen laufen nun nach
CHANNEL_CONFIRMATION_TTL_MINUTES(Standard 24h) über einen Hintergrund-Sweeper automatisch ab. Dies verhindert, dass ein veralteter Klick Tage später den Agentenstatus ändert, der bereits abgebaut wurde; der nächste Klick auf eine abgelaufene Karte erhält eine graue „Expired”-Karte und einen „no longer active”-Toast. - „Send Test Message” sendet nun eine reine Textbenachrichtigung (ohne Genehmigen/Ablehnen-Buttons) und ist nur im Channel-Detailblatt verfügbar — nicht im Zeilen-Dropdown. Benutzer, die keine Approval-Hooks verwenden möchten, werden nicht durch interaktive Buttons auf einer „Test”-Nachricht verwirrt. Das Testen des Approval-Roundtrips bleibt über den Approval-Playground-Button verfügbar.
- Das Channel-Detailblatt wurde gestrafft: „How to finish setup” ist nun ein standardmäßig eingeklappter Abschnitt (damit er das Blatt bei bereits konfigurierten Channels nicht dominiert), und der äußere Abstand wurde reduziert, sodass der Inhalt näher am Blattrand liegt.
- Builder AI meldet maskierte (
****) Credentials nicht mehr als fehlend — sie werden nun als konfiguriert erkannt und falsche „Credential fehlt”-Hinweise werden übersprungen. - Die Agent-Liste im Playground zeigt nun alle zugänglichen Agenten anstatt nur veröffentlichte, sodass Entwurfs-Agenten ohne vorherige Veröffentlichung getestet werden können.
- Chat-Bild-Uploads bringen den Stream bei fehlerhaften
data:-URLs nicht mehr zum Absturz — der MIME-Extraktor fällt nun sicher aufapplication/octet-streamzurück, anstatt mitten im Generierungsprozess einen IndexError auszulösen. - Playground-Bild-Thumbnails brechen nun laufende Abrufe beim Unmount über
AbortControllerab, um veraltete Blob-URL-Zuweisungen und verschwendete Bandbreite bei schneller Navigation zu vermeiden.
[v0.8.4] - 2026-04-17
Hinzugefügt
- Gesprächswiederherstellung: Synthetische
tool_result-Zeilen werden nun nach einem unterbrochenen Turn gespeichert; Clients können einen unterbrochenen SSE-Stream überPOST /chat/resumemit dem zuletzt gesehenen Cursor fortsetzen. - Das Playground verbindet unterbrochene SSE-Streams nun automatisch über den
/chat/resume-Endpunkt mit exponentiellem Backoff (max. 3 Versuche) neu; während der Wiederherstellung wird ein „Reconnecting…”-Indikator angezeigt. - Prompt-Cache-Observability:
cache_read_input_tokensundcache_creation_input_tokenswerden aus LLM-Antworten erfasst, pro Turn inTurnProfileraggregiert, alsturn_cache-Zusammenfassungszeile (read/create tokens + estimated savings) protokolliert und im Chat-done_payloadunter einem neuencache-Feld bereitgestellt. Dies ermöglicht die Überprüfung, ob das Anthropic-Prompt-Caching tatsächlich greift, und dient gleichzeitig als Detektor dafür, ob API-Relaisstationen den Cache-Rabatt berücksichtigen.
Geändert
- System-Prompts verwenden jetzt eine memoized Section-Registry mit Anthropic Prompt-Caching-Breakpoints auf dem stabilen Präfix — reduziert die Token-Kosten pro Turn um ~60–80 % auf dem gecachten Präfix für Claude-Modelle. ReAct JSON-Modus, nativer Function-Calling-Modus und Synthese senden jeweils zwei System-Nachrichten für cache-fähige Provider (Claude, Bedrock Anthropic, Vertex Claude) und fallen für alle anderen Provider auf eine einzelne verkettete Nachricht zurück.
Behoben
- Denk-/Reasoning-Tokens bleiben nun über mehrere Gesprächsrunden hinweg erhalten — das Anthropic-Feld
signaturewird erfasst und gemäß API-Anforderungen erneut übermittelt. - Anbieterspezifische Richtlinie für Reasoning-Replay:
reasoning_content(von DeepSeek-R1, Qwen QwQ, Gemini thinking, OpenAI o-series) wird bei nachfolgenden Gesprächsrunden nicht mehr an Nicht-Anthropic-Anbieter zurückgesendet. Zuvor wurde das Feld inChatMessage.to_openai_dict()bedingungslos serialisiert, was gegen die Anbieterdokumentation verstieß (DeepSeek und Qwen dokumentieren beide ausdrücklich: „reasoning_contentnicht in der Nachrichtenhistorie zurücksenden”) und deren automatische Präfix-/KV-Caches bei jedem Mehrfach-Austausch stillschweigend ungültig machte. Die Richtlinie ist incore/prompt/reasoning.pyzentralisiert — die Claude-Familie (einschließlich Bedrock- und Vertex-Proxys) übermittelt Thinking-Blöcke weiterhin mit Signatur, wie erforderlich.
[v0.8.3] - 2026-04-16
Hinzugefügt
- Integriertes Tool
convert_to_markdown— Neues universelles Agent-Tool, das beliebige Dateien, URLs, YouTube-Links oder Daten-URIs mithilfe von Microsofts MarkItDown in sauberes Markdown konvertiert. Unterstützt PDF, Word (.docx), Excel (.xlsx/.xls), PowerPoint (.pptx), HTML, JSON, CSV, XML, ZIP, EPUB, Outlook .msg, Bilder, Audio (Sprache → Text) und YouTube-Transkripte. Standardmäßig für jeden Agenten verfügbar — gleiche Stufe wieweb_fetch. Wenn ein visionsfähiges LLM konfiguriert ist, werden eingebettete Bilder und gescannte PDF-Seiten automatisch per OCR über das offiziellemarkitdown-ocr-Plugin verarbeitet. Bisher war diese Funktion in der Hintergrund-RAG-Ingestion-Pipeline verborgen; Agenten haben sie nun auf dem interaktiven Konversationspfad verfügbar. - Dokument-OCR via
markitdown-ocr— Eingebettete Bilder in DOCX / XLSX / PPTX und gescannte PDF-Seiten werden jetzt per OCR mit demselben visionsfähigen LLM verarbeitet, das FIM One für alle anderen Aufgaben verwendet. Gilt sowohl für das integrierte Toolconvert_to_markdownals auch für die RAG-Ingestion-Pipeline, sodass die Konvertierung zur Chat-Zeit und die Wissensdatenbank-Ingestion für dieselbe Eingabe byte-identisches Markdown erzeugen. - Universelle Vision-Provider-Unterstützung für Dokument-OCR — Ein neuer
LiteLLMOpenAIShim-Duck-Type kapselt jeden FIM OneOpenAICompatibleLLMin die API-Form des openai SDK.chat.completions.create(...)und leitet dann überlitellm.completion()weiter. MarkItDown (das die openai SDK-Oberfläche fest verdrahtet) kann nun Anthropic Claude, Google Gemini, Azure, Bedrock und jeden anderen von LiteLLM unterstützten Provider nutzen — ohne providerspezifischen Adaptercode in FIM One. - Visionsbewusste RAG-Ingestion — Uploads von Office-Dokumenten und gescannten PDFs in die Wissensdatenbank ermitteln jetzt das Standard-Vision-LLM des Workspaces (DB-first, ENV-Fallback) und übergeben es zur OCR-Verarbeitung während der Ingestion an MarkItDown. Keine Regression: Wenn kein visionsfähiges Modell verfügbar ist, fällt die Ingestion stillschweigend in den reinen Textmodus zurück — exakt das Verhalten vor diesem Feature.
- Erweiterte MarkItDown-Formatunterstützung — RAG verarbeitet jetzt nativ
.pdf,.msg(Outlook),.epub,.mp3,.wavund.m4aüber MarkItDowns Audio-Transkriptions- und Outlook-Extras. YouTube-URLs werden überconvert_to_markdownviamarkitdown[youtube-transcription]verarbeitet. - Umgebungsvariable
LLM_SUPPORTS_VISION— Optionales Opt-out (=false) für den ENV-Modus-Dokument-OCR-Fallback. Das Standardverhalten ist optimistisch (true), was die gängigen ENV-Setups abdeckt (gpt-4o,claude-3-5-sonnet,gemini-1.5-pro/flash). Setzen Sie den Wert nur auffalse, wenn Ihr ENV-konfiguriertesLLM_MODELkeine Vision unterstützt (z. B.deepseek-v3,qwen-chat,llama-3.1,gpt-3.5-turbo,o1-mini), um einen fehlschlagenden Vision-Aufruf bei jedem Dokument-Upload zu vermeiden. Wird vollständig ignoriert, wenn eine admin-kuratierte ModelGroup aktiv ist — der DB-Modus ist immer die maßgebliche Quelle, wenn verfügbar. - Turn-Level-Profiler — Jeder ReAct-Turn protokolliert jetzt phasenweise Zeitangaben (
memory_load,compact,tool_schema_build,llm_first_token,llm_total,tool_exec) in einer einzigen strukturierten Log-Zeile pro Turn. Umschaltbar überREACT_TURN_PROFILE_ENABLED(Standard: aktiviert; auffalsesetzen für einen Overhead-freien No-op). - Strukturierte kompakte Work Card — Die Konversationskomprimierung parst jetzt ihre eigene 9-Abschnitte-Markdown-Ausgabe in eine typisierte
WorkCardund führt neue Komprimierungen mit der vorherigen zusammen, sodass Fehler und ausstehende Aufgaben aus früheren Phasen einer langen Sitzung über mehrere Komprimierungsrunden hinweg erhalten bleiben, anstatt von Grund auf neu zusammengefasst zu werden.
Geändert
- Ratenbegrenzung pro Benutzer — Der LLM-Ratenbegrenzer verwaltet jetzt einen separaten Bucket pro Benutzer anstelle eines einzelnen prozessglobalen Buckets. Verhindert, dass ein einzelner Benutzer mit hohem Aufkommen alle anderen Benutzer auf demselben Worker drosselt. Umschaltbar über
LLM_RATE_LIMIT_PER_USER(Standard: aktiviert).
Behoben
- Wiederherstellung hängender tool_use-Blöcke — Gespräche, die mitten in der Tool-Ausführung unterbrochen wurden (Benutzer-Stop, SSE-Trennung, Absturz), hinterließen bisher eine Assistentennachricht mit einem
tool_use-Block ohne passendestool_result, was dazu führte, dass der nächste Gesprächszug mit einem undurchsichtigen HTTP 400 von der LLM API abstürzte.DbMemory.get_messages()erkennt und repariert diese hängenden Blöcke nun beim Lesen mit einem synthetischen[interrupted]tool_result. Das rohe DB-Protokoll wird nicht verändert. - Leere Assistentennachrichten mit tool_calls werden nicht mehr verworfen — Der Ladefilter von DbMemory hat bisher stillschweigend alle Assistentenzeilen mit leerem Textinhalt verworfen. Native Function-Calling-Zwischenschritte (die nur
tool_callsenthalten, keinen Text) wurden dadurch gelöscht. Der Filter erfordert nun SOWOHL leeren Inhalt ALS AUCH keinetool_calls.
[v0.8.2] - 2026-04-10
Hinzugefügt
- Intelligente Dokumentenverarbeitung (Vision-fähig) — Adaptive Dokumentenverarbeitung basierend auf den Modellfähigkeiten. Wenn das Ziel-LLM Vision unterstützt (GPT-4o, Claude 3/4, Gemini), werden PDF-Seiten als Bilder gerendert und über Vision-Content-Blöcke für volle visuelle Wiedergabetreue übermittelt. Nur-Text-Modelle greifen auf die pdfplumber-Textextraktion zurück. Zwei Modi: Vision und Nur-Text. Konfigurierbar über die Umgebungsvariablen
DOCUMENT_PROCESSING_MODE,DOCUMENT_VISION_DPI,DOCUMENT_VISION_MAX_PAGES. Pro-Modell-Umschaltersupports_visionim Admin-Bereich. - Dokument-Vision-Pipeline — DOCX-, PPTX- und PDF-Dateien, die im Chat hochgeladen werden, haben ihre eingebetteten Bilder extrahiert und werden als Vision-Inhalt an das LLM gesendet, wenn Vision für das Modell aktiviert ist.
- Multi-Turn-Vision-Persistenz — Vision-Inhalte aus hochgeladenen Dokumenten und Bildern bleiben über Gesprächsrunden hinweg erhalten, sodass das Modell den visuellen Kontext während des gesamten Gesprächs beibehält.
- Intelligente PDF-Verarbeitung — Textreiche PDF-Seiten extrahieren Text sowie eingebettete Bilder separat (spart Tokens). Gescannte oder nur-Bild-Seiten werden als ganzseitiges PNG für maximale Wiedergabetreue gerendert.
- Vorgefertigtes Sandbox-Image —
Dockerfile.sandboxmit gängigen Data-Science-Paketen (pdfplumber, Pillow, pandas usw.), damit die KI-Code-Ausführung in--network=none-Containern sofort funktioniert. - Resource-Fork-Vervollständigung — Alle fünf Ressourcentypen unterstützen jetzt Fork: Agent, Connector, Workflow, MCP Server und Skill. KB-Fork wurde entfernt (inhärent benutzerspezifisch).
Geändert
- Schnellere Chat-Antwort-Vervollständigung — Der SSE-Stream wird jetzt sofort geschlossen, nachdem der Agent fertig ist; Titelgenerierung und Folgevorschläge laufen im Hintergrund, anstatt die Antwort zu blockieren.
- Intelligentere Kontextkomprimierung — Die Gesprächskomprimierung verwendet ein strukturiertes 9-Abschnitte-Format, das wichtige Informationen (ursprüngliche Anfrage, Fehler, ausstehende Aufgaben) über lange Sitzungen hinweg besser bewahrt.
- Reduzierte Agent-Schleifen — Anti-Schleifen-Anweisungen wurden zu Agent-Prompts hinzugefügt; der Schwellenwert zur Zykluserkennung wurde gesenkt, sodass wiederholte identische Tool-Aufrufe früher erkannt werden.
- Schnellerer Anfrage-Start — LLM-Konfigurationsabfragen und Domänenklassifizierung laufen jetzt gleichzeitig, was den Overhead pro Anfrage um 400–1100 ms reduziert.
- Bessere Behandlung leerer Tool-Ergebnisse — Tools, die keine Ausgabe zurückgeben, erzeugen jetzt eine beschreibende Meldung anstelle des bloßen „(no output)”, was unnötige Wiederholungsversuche verhindert.
- Automatische Bereinigung alter Tool-Ergebnisse — Tool-Ergebnisse, die älter als die 6 neuesten sind, werden vor der Kontextkomprimierung automatisch gelöscht, um Gespräche schlank zu halten.
- Gesamtbudget für Tool-Ergebnisse — Die gesamten Tool-Ergebnis-Tokens sind auf 40.000 pro Sitzung begrenzt; neue Ergebnisse werden abgeschnitten, wenn das Budget überschritten wird, um Kontext-Aufblähung durch große API-Antworten zu verhindern.
- Automatische Wiederherstellung bei Kontext-Überlauf — Wenn das LLM eine Anfrage aufgrund eines Kontext-Längen-Überlaufs ablehnt, komprimiert der Agent automatisch auf 50 % und wiederholt den Versuch, anstatt das gesamte Gespräch zum Absturz zu bringen.
- Schlüsselwortbasierte Tool-Auswahl — Wenn eine Anfrage offensichtlich einem bestimmten Tool anhand von Name oder Beschreibungs-Schlüsselwörtern entspricht, überspringt der Agent den LLM-basierten Tool-Auswahlaufruf und spart 200–500 ms.
- LLM-Verbindungs-Pooling — Alle LLM-API-Aufrufe teilen jetzt einen einzigen Verbindungspool mit optimierten Keepalive-Einstellungen, was den Verbindungsaufwand über die gesamte Sitzung hinweg reduziert.
- Intelligentere Abschluss-Prüfung — Der Nachprüfungsschritt nach der Antwort wird bei langen, detaillierten Antworten (> 200 Tokens) übersprungen, wodurch ein unnötiger LLM-Roundtrip entfällt.
- Modell-Fallback bei Anbieterausfall — Wenn das primäre Modell nicht verfügbar ist (ratenlimitiert, überlastet oder ausgefallen), wiederholt der Agent den Versuch automatisch mit dem schnellen Modell, anstatt zu scheitern.
Behoben
- Agent-Halluzination bei unlesbaren Dateien — Wenn der KI-Agent eine Datei nicht lesen konnte (z. B. bildbasiertes PDF), las er zuvor andere, nicht verwandte Dateien und präsentierte deren Inhalt als den der Zieldatei. Ein Dateiintegritäts-Schutzwall im System-Prompt verhindert dies nun.
- File-ID-Injektion bei Uploads — Hochgeladene Dateien enthalten jetzt ihre UUID
file_idim Nachrichtenkontext, sodass der Agent direkt überread_uploaded_fileauf sie zugreifen kann, ohne zu raten. - Vision-Toggle liest aus neuer Modellstruktur — Das Flag
supports_visionin Modellkonfigurationen wurde aus der ModelGroup/ModelProviderModel-ORM-Struktur nicht korrekt ausgelesen. Behoben. - Verbesserte Fehlermeldungen für unlesbare Dateien — Wenn Dateien nicht gelesen werden können, gibt das Tool jetzt spezifische Hinweise zurück (Dateityp, Vision-Empfehlung) anstelle generischer Fehlermeldungen.
[v0.8.1] - 2026-03-29
Hinzugefügt
- Zeitzonenbewusste Admin-Benachrichtigungen — Admin-Benachrichtigungs-E-Mails zeigen Ereigniszeiten nun in der konfigurierten Zeitzone jedes Empfängers an, anstatt immer UTC zu verwenden.
- Schrittweise Datenbankwerkzeug-Offenlegung — Ein einzelnes
database-Meta-Tool mit den Unterbefehlenlist_tables/discover/queryersetzt individuelle tabellenspezifische Tools. Konfigurierbar über die UmgebungsvariableDATABASE_TOOL_MODE(progressiveals Standard,legacyals Fallback). - Bedarfsgesteuertes Tool-Laden — Wenn mehr als 12 Tools verfügbar sind, ermöglicht ein
request_tools-Meta-Tool dem Agenten, während eines Gesprächs dynamisch zusätzliche Tools zu laden, anstatt auf die anfängliche Auswahl beschränkt zu bleiben. - Schrittweise MCP-Tool-Offenlegung — Ein einzelnes
mcp-Meta-Tool mit den Unterbefehlendiscover/callersetzt individuelle serverspezifische Tools. Konfigurierbar über die UmgebungsvariableMCP_TOOL_MODE(progressiveals Standard,legacyals Fallback). - Token-Budget-Schutzschalter pro Gesprächsrunde — Die Umgebungsvariable
REACT_MAX_TURN_TOKENSbietet einen Notausschalter für unkontrollierte Agentenschleifen. Standard0(unbegrenzt) — verwenden Sie stattdessentoken_quotapro Benutzer zur täglichen Kostenkontrolle. - Native Function Calling-Umschalter pro Modell — Die Einstellung
tool_choice_enabled(ENV + Admin pro Modell) ermöglicht es Modellen, die erzwungene Tool-Auswahl ablehnen, Level 1 zu überspringen und direkt in den JSON-Modus zu wechseln. Konfigurierbar unter Einstellungen → Modelle → Erweitert. - DAG-Qualitätsverbesserung — Fünf Verbesserungen: Standard-Modell-Upgrade auf das allgemeine Modell für nicht-schnelle Schritte; automatische Skill-Erkennung bei der Planung; Zitierprüfer für Rechts-, Medizin- und Finanzbereiche; strukturierte Inhaltskontext-Beibehaltung mit konfigurierbarem Kürzungsmultiplikator; Domänenklassifizierung im Router mit domänengesteuerter Modellauswahl.
- Domänenmodell-Eskalation in ReAct — Spezialisierte Domänen (Recht/Medizin/Finanzen) eskalieren automatisch zum Reasoning-Modell mit obligatorischer Websuche und Zitierverifizierung.
- Dateianhang-Download — Datei-Karten in Chat-Nachrichten sind nun anklickbar, um die Originaldatei herunterzuladen.
- Admin-Benachrichtigungs-Hauptschalter — Globaler Ein/Aus-Schalter für Admin-E-Mail-Benachrichtigungen mit SMTP-Erkennung zur Laufzeit. Zeigt ein Warnbanner an, wenn SMTP nicht konfiguriert ist, und deaktiviert alle Benachrichtigungssteuerungen.
- SMTP Reply-To-Header — Die neue Umgebungsvariable
SMTP_REPLY_TOermöglicht es, Antworten an eine andere Adresse als den Absender zu senden. - Resource Fork Phase 1 (MCP Server + Skill) — Die Endpunkte
POST /api/mcp-servers/{id}/forkundPOST /api/skills/{id}/forkerstellen benutzereigene Deep Copies mitvisibility=personalundforked_from-Herkunftsverfolgung. Verschlüsselte Umgebungsvariablen/Header werden beim MCP-Server-Fork übersprungen; der Veröffentlichungsstatus wird beim Skill-Fork übersprungen. Die Alembic-Migration fügt die Spalteforked_fromzu beiden Tabellen hinzu. 41 Tests. - Workflow-Verbindungs-Abhängigkeits-Auto-Abonnement —
DependencyAnalyzer._resolve_workflowlöst nun rekursiv Sub-Workflow-Abhängigkeiten mit Zykluserkennung (besuchte Menge) auf. Agent- und Sub-Workflow-Knoten werden korrekt als Inhaltsabhängigkeiten in Abhängigkeitsmanifesten hinzugefügt. Fehlende Ressourcen werden problemlos behandelt (Protokollwarnung, kein Fehler). 19 Tests. - Vorgefertigte Lösungsvorlagen (Market Seed Content) — 8 vertikale Lösungsvorlagen werden idempotent bei der Erstbenutzerregistrierung initialisiert: Finanzprüfung, Vertragsüberprüfung, Datenberichterstattung, IT-Helpdesk, HR-Onboarding, Vertriebsassistent, Content Writer, Besprechungszusammenfassung. Jede bündelt einen Agenten + Skill mit chinesischen SOPs. Veröffentlicht in der Market-Organisation (
visibility=org,publish_status=approved) für sofortige Marketplace-Verfügbarkeit. 4 Tests. - ReAct-Zykluserkennung — Deterministische Erkennung wiederholter identischer Tool-Aufrufe. Fügt nach 3 aufeinanderfolgenden Aufrufen mit denselben Argumenten eine Warnung ein und verhindert so, dass Agenten bei fehlschlagenden Tools in Schleifen geraten. Konfigurierbar über
REACT_CYCLE_DETECTION_THRESHOLD. - ReAct-Abschluss-Checkliste — Einmalige Verifizierungsaufforderung vor der Annahme endgültiger Antworten, wenn Tools verwendet wurden, um voreilige oder unvollständige Antworten zu reduzieren. Pro Agenten-Instanz umschaltbar.
Geändert
- Mindestanzahl an Tools für die Abschluss-Checkliste — Die Checkliste wird jetzt nur ausgelöst, wenn der Agent 3 oder mehr Tool-Aufrufe durchgeführt hat (konfigurierbar über
REACT_COMPLETION_CHECK_MIN_TOOLS). Einfache Aufgaben mit 1–2 Tool-Aufrufen überspringen die Überprüfung, um unnötige Latenz zu vermeiden. - Dynamisches System-Prompt-Budgeting — Der feste
SYSTEM_PROMPT_RESERVE-Wert (4K tokens) wurde aus der Kontextbudget-Berechnung entfernt. ContextGuard berücksichtigt den System-Prompt jetzt dynamisch und stellt pro Iteration ~4K mehr nutzbaren Kontext bereit. - Zentralisierte Tool-Kürzung — Alle Tool-Typen delegieren die Kürzung jetzt an ein gemeinsames Modul. Die Standardwerte sind über die Umgebungsvariablen
TOOL_OUTPUT_MAX_CHARS,TOOL_OUTPUT_MAX_ITEMSundTOOL_OUTPUT_MAX_BYTESkonfigurierbar. - Entkoppelte Domain-Erkennung — Die Domain-Klassifizierung läuft in jedem Endpunkt unabhängig und ist nicht mehr mit dem Auto-Routing gebündelt. Die Domain-SOP-Anweisungen wurden abgeschwächt, um die Web-Suche zu empfehlen statt zu erzwingen.
AUTO_ROUTING-Umgebungsvariable entfernt — Der Auto-Endpunkt klassifiziert Anfragen jetzt immer.
Behoben
- Doppelte Nachrichtenübermittlung — Die Chat-Eingabe verwendet jetzt eine synchrone Sperre, um zu verhindern, dass dieselbe Nachricht bei schnellen Klicks mehrfach gesendet wird.
- Degradierungskette für strukturierte Ausgabe — Der 3-stufige Fallback (natives FC → JSON-Modus → Klartext) durchläuft jetzt alle Ebenen korrekt.
json_mode_enabledDB-Wert wird ignoriert — Modelle, die über Admin konfiguriert wurden, verwenden jetzt korrekt ihre modellspezifische Einstellung, anstatt immer auf die Umgebungsvariable zurückzufallen.- DAG-Planungsfehler-Meldung — Zeigt jetzt eine benutzerfreundliche zweisprachige Meldung anstelle des rohen Pipeline-Fehlers an.
- MCP-Server-Eigentümer-Bypass für allow_fallback — Der Server-Eigentümer wird nicht mehr durch
allow_fallback=Falseblockiert.
[v0.8] - 2026-03-20
Hinzugefügt
- Marketplace-Neugestaltung Phase 1 — Lösungen + Komponenten — Zweistufiges Market-Modell (Lösungen: Agent/Skill/Workflow; Komponenten: Connector/MCP Server) mit Bereichsauswahl (Global Market / Org). KB aus dem Market-Bereich entfernt. Einheitliches Abonnementmodell.
- Intelligente Dateiinhalts-Einbettung +
read_uploaded_file-Tool — Kleine Uploads (unter 32.000 Zeichen) werden automatisch in den LLM-Kontext eingebettet; große Dateien erhalten Metadaten + Tool-Hinweis. Zweimodus-Lesetool mit Paginierung und Regex-Suche. EndpunktGET /api/files/{file_id}/content. - Workflow Blueprint System — Visueller Workflow-Editor für mehrstufige Automatisierung: 25 Knotentypen (Start, End, LLM, ConditionBranch, QuestionClassifier, Agent, KnowledgeRetrieval, Connector, HTTPRequest, VariableAssign, TemplateTransform, CodeExecution, Iterator, Loop, VariableAggregator, ParameterExtractor, ListOperation, Transform, DocumentExtractor, QuestionUnderstanding, HumanIntervention, SubWorkflow, ENV + weitere), React Flow v12-Editor mit Drag-and-Drop-Palette, Auto-Layout, SSE-Echtzeit-Ausführung, Variableninterpolation, Bedingungs-/Klassifizierer-Verzweigung, Fehlerstrategien pro Knoten, Timeout pro Knoten, Import/Export/Duplizieren, Versionsverlauf mit Diff-Viewer, 14 integrierte Vorlagen, 306 Tests.
- Workflow-Trigger — Cron-Planung mit Zeitzonenunterstützung; öffentliche API-Schlüssel (Präfix
wf_) für externe Ausführung ohne Benutzerauthentifizierung; Batch-Ausführung (bis zu 100 Eingabesätze, konfigurierbare Parallelität). - Workflow-Operationen — Echtzeit-Ausführungsprotokoll-Viewer, Trace-Viewer mit Variablen-Snapshots, Ausführungs-Replay-Overlay auf der Canvas, Export des Ausführungsverlaufs, Analyse-Dashboard mit täglichen Trends und Perzentilen, Statistikbereich pro Knoten, Favoriten/Anheften, Inline-Validierungsabzeichen, Canvas-Knotensuche (
Cmd+F), Tastaturkürzel, Raster-Einrasten. - Workflow-Administration + Vorlagen — Admin-Verwaltungsreiter für alle Workflows,
WorkflowTemplate-Modell mit Admin-CRUD und 5 Seed-Vorlagen, Veröffentlichungsablauf mit organisationsweiter Prüfungssteuerung, Import-Konfliktlöser für externe Referenzen. - Agent Skill System — Bedarfsgesteuertes Skill-Laden:
Skill-Modell mit CRUD/Veröffentlichen/Prüfung,read_skill(name)-Tool für progressive Offenlegung (~80 % Token-Reduzierung),compact_instructionspro Agent für benutzerdefinierte ContextGuard-Komprimierung. Vollständige Skills-UI mit Listenseite, Editor und Agent-Skill-Auswahl. - ConnectorMetaTool (Progressive Disclosure Phase 1–2) — Ein einzelnes Meta-Tool ersetzt aktionsspezifische Tools. Der System-Prompt erhält leichtgewichtige Stubs (~30 Tokens/Connector); der Agent ruft bei Bedarf
discover/executeauf. Feature-FlagCONNECTOR_TOOL_MODEfür Abwärtskompatibilität. - Connector Import/Export/Fork — Connector-Vorlagen per JSON-Export teilen, klonen und per Fork anpassen. Das Backend bereinigt Anmeldedaten beim Export.
- Connector-Anmeldedatenverschlüsselung + benutzerspezifische Überschreibung — Tabelle
connector_credentialsmit Fernet-Verschlüsselung,allow_fallback-Flag, EndpunkteGET/PUT/DELETE /my-credentials. - Veröffentlichungs-Review-UI — Organisationsweites Review-System mit Genehmigungs-/Ablehnungsworkflow, Statusabzeichen auf Ressourcenkarten, Review-Hinweis im Veröffentlichungsdialog, erneutes Einreichen abgelehnter Ressourcen.
- Semantische Schema-Annotationen — 16 vordefinierte semantische Tags für Connector-Felder mit
description- undpii-Flags, die in LLM-Tool-Beschreibungen angezeigt werden. - Agent-Selbstreflexion im laufenden Betrieb — Zielprüfungs-Prompt wird alle 6 Iterationen in ReAct eingebettet, um Abweichungen in langen Ketten zu verhindern.
- Shadow Market Org + Ressourcenabonnements — Pull-basiertes Ressourcenteilen: Ressourcen werden über den Marketplace entdeckt und explizit abonniert. Market API zum Durchsuchen/Abonnieren/Abbestellen.
- Agent Auto-Discovery + Sub-Agent-Bindung —
discoverable-Flag +sub_agent_ids-Whitelist +CallAgentToolfür einstufige Delegation. - MCP-Server-Anmeldedaten + benutzerspezifische Überschreibung — Tabelle
mcp_server_credentialsmitallow_fallback-Flag für das Fallback-Verhalten bei Anmeldedaten. - Connector/KB-Umschalter — Endpunkte zum Suspendieren/Fortsetzen für beide Ressourcentypen.
- Eigenständige KB-Konversationen — Feld
kb_idsin Konversationen für direkten KB-Chat ohne Agent-Bindung. - Review-Protokoll-Audit-Reiter — Admin-Audit-Seite mit Umschalter zwischen Systemprotokoll und Review-Protokoll sowie filterbarem Review-Verlauf pro Org/Ressource.
- Agent-Direktive in der Synthese — Parameter
agent_directivestellt sicher, dass Abschlussantworten dem Kernzweck des Agents entsprechen.
Geändert
- Abonnementbasiertes Sichtbarkeitsmodell — Von 3-stufig auf 2-stufig vereinfacht (eigen → abonniert). Automatische Migration erhält bestehende Zugriffsrechte.
- Tool-Cache-Whitelist — Blacklist durch explizite
cacheable-Eigenschaft bei Tools ersetzt. 11 schreibgeschützte Tools als cacheable markiert. - DAG-Executor-Kaskadenfehler — Fehlgeschlagene Schritte blockieren nun abhängige Schritte kaskadenartig mit transitiver Weitergabe.
- DAG-Planer-Verbesserungen — Tool-Beschreibungen im Planer, vollständige Neuplanungshistorie über alle Runden, 14 Engine-Konstanten als Umgebungsvariablen parametrisiert.
stream_answer-Beobachtungskürzung — Von 2000 auf 8000 Zeichen erhöht (konfigurierbar überREACT_TOOL_OBS_TRUNCATION).- Evidenz-Konfidenz-UI — Bernsteinfarbene Warnkarten,
[N]-Zitatbadges mit Hover-Popovers, Konfliktwarnung-Banner mit Nebeneinandervergleich. - Workflow-Versionsänderungszusammenfassungen — Automatisch generierte, menschenlesbare Zusammenfassungen aus Blueprint-Diffs beim Versionsspeichern.
- Bereinigung der Workflow-Ausführungsaufbewahrung — Hintergrundbereinigungsaufgabe mit konfigurierbaren Alters-/Anzahllimits. Umgebungsvariablen:
WORKFLOW_RUN_MAX_AGE_DAYS,WORKFLOW_RUN_MAX_PER_WORKFLOW. - Connector-Leistungsschalter — Drei-Zustands-Automat (geschlossen/offen/halb-offen) mit connectorspezifischer Fehlerverfolgung und Überwachungsendpunkten.
- elkjs durch leichtgewichtiges BFS-Auto-Layout ersetzt —
/workflows/[id]-Bundle von 473 kB auf 43 kB reduziert.
Behoben
- Workflow-Eval-Namespace-Flattening — Behobene Auflösung kurzer Variablennamen in ConditionBranch und VariableAssign.
- Kein erneutes Review beim
is_active-Toggle — Das Umschalten vonis_activesetztpublish_statusnicht mehr vonapprovedaufpending_reviewzurück. - Cascade-Skip für Condition-Branches — Übersprungene Knoten deaktivieren ausgehende Kanten korrekt.
- Dependency-Analyzer — Behobene
skill_ids-Auflösung, Knotentyp-Matching ohne Berücksichtigung der Groß-/Kleinschreibung.
Entfernt
is_global-Feld und alle Konzepte zur globalen Sichtbarkeit entfernt — ersetzt durch Market-Org + Abonnements.- Globale Admin-Endpunkte für Agents/MCP-Server entfernt.
[v0.7.5] - 2026-03-12
Hinzugefügt
- Freier Moduswechsel — Wechsel zwischen Auto/React/DAG mitten in einer Konversation. Modusverfolgung pro Gesprächsrunde über
metadata.mode. - Drei Modellrollen — Unabhängige Umgebungskonfiguration für die Stufen General, Fast und Reasoning. Das Fast-Modell erbt nicht mehr die Einstellungen des Hauptmodells.
- DAG-Engine-Verbesserungen —
StepOutput-Strukturdaten, Tool-Cache mit asynchroner Sperren-Stampede-Prävention, LLM-Verifikation pro Schritt mit Wiederholung (DAG_STEP_VERIFICATION), automatisches Routing via Fast-LLM-Klassifizierung (AUTO_ROUTING). - Connector-Anmeldedaten-Verschlüsselung — Auth-Tokens werden in die Tabelle
connector_credentialsmit Fernet-Verschlüsselung überCREDENTIAL_ENCRYPTION_KEYausgelagert. Endpunkte zur benutzerspezifischen Anmeldedaten-Überschreibung. Flagallow_fallback. - ModelConfig-API-Schlüsselverschlüsselung im Ruhezustand — Transparentes Verschlüsseln beim Schreiben / Entschlüsseln beim Lesen mit abwärtskompatible Klartexterkennung.
Geändert
- Skeleton screens — Alle Listen-/Rasterseiten zeigen beim Laden layoutbewusste Skeletons anstelle von Ladeanimationen.
Behoben
- Das Fast-Modell übernimmt keine Einstellungen mehr vom Hauptmodell.
- SSE-Routing-Ereignisfeldnamen wurden mit dem Backend abgeglichen.
[v0.7.4] - 2026-03-12
Hinzugefügt
- Evaluation Center — Verwaltung von Testdatensätzen, parallele Evaluierungsläufe mit LLM-Bewertung, Ergebnisanzeige pro Fall (Bestanden/Nicht bestanden/Latenz/Token) mit automatischem Polling.
- Admin:
json_mode_enabled-Flag pro Modell — Expliziter Schalter zur Vermeidung von AWS Bedrock Prefill-Problemen. ENV-Modelle werden überLLM_JSON_MODE_ENABLEDgesteuert. - SSE Protocol v2 — Echtzeit-Streaming mit
delta_reasoning- undusage-Feldern sowie aufgeteiltendone/suggestions/title/end-Events. - AI Builder-Erweiterung — 7 neue Builder-Tools,
is_builder-Flag, automatische Aktualisierung des Builder-Prompts, SSRF-Schutz. Vollständiger ReAct-Agent-Dialog für die Connector-Verwaltung. - Dual-Datenbankunterstützung — SQLite (ohne Konfiguration) + PostgreSQL (Produktion). Docker Compose stellt PG automatisch mit Health Checks bereit.
- Extended Thinking / Reasoning —
LLM_REASONING_EFFORTundLLM_REASONING_BUDGET_TOKENSfür OpenAI o-Series, Gemini 2.5+ und Claude. - Admin: Tool deaktivieren — Aktivierungs-/Deaktivierungsschalter pro Tool; deaktivierte Tools werden zur Laufzeit aus dem Chat herausgefiltert.
- Einstellungen: Organisations-Tab — Organisationen direkt in den Einstellungen erstellen, beitreten und mit Mitgliederrollen verwalten.
- Docker Compose-Deployment — Einzelnes Image, benannte Volumes, eigenständige Next.js-Ausgabe.
- Export: PDF-Format — Konversationen können als PDF-Dokumente exportiert werden.
- Multi-Worker-Unterstützung —
WORKERS=N-Umgebungsvariable; Redis-Interrupt-Broker für Worker-übergreifende Weiterleitung.
Geändert
- LLM-Schicht: LiteLLM — Direkten
AsyncOpenAI-Client durch universelle Provider-Unterstützung ersetzt. - Degradierung strukturierter Ausgaben —
structured_llm_call()mit 3-stufiger Extraktion vereinheitlicht (Native FC → JSON Mode → Klartext + Regex). - Intelligentes Relay-Routing — Erkennt das API-Protokoll automatisch anhand von URL-Pfadmustern für Drittanbieter-Relay-Plattformen.
Behoben
- Docker-Sandbox (DooD) Volume-Mount-Pfad-Übersetzung.
- Sicherheit: Sandbox-AST-Dunder-Validierung, MCP-stdio-Standardwerte, SSRF-DNS-Rebinding, Shell-Metazeichen-Umgehung, Connector-Template-Injection.
- Admin-Dashboard-Statistiken Absturz auf PostgreSQL.
- Docker: i18n-Datei-Erkennung, Startbedingung Race Condition, OAuth-Automatik-Erkennung für benutzerdefinierte Ports.
- Export: RFC 5987-Dateiname für CJK.
[v0.7.3] - 2026-03-06
Hinzugefügt
- Globale MCP-Server — Vom Administrator bereitgestellt, in allen Chat-Sitzungen geladen.
- Strukturiertes Audit-Logging —
write_audit()-Hilfsfunktion mit strukturierten Spalten.
Behoben
- Rückwärtskompatibilität des Einladungscodes für das veraltete Feld
registration_enabled.
[v0.7.2] - 2026-03-06
Hinzugefügt
- Nur-Einladungs-Registrierung — Drei Modi (offen/Einladung/deaktiviert) mit Einladungscode-CRUD.
- Speicherverwaltung — Festplattennutzung pro Benutzer, Löschen, Bereinigung verwaister Dateien.
- Erzwungene Abmeldung pro Benutzer — Admin-Token-Widerruf.
- Konversationsmoderation — Admin kann alle Konversationen auflisten/löschen.
[v0.7.1] - 2026-03-06
Hinzugefügt
- API-Health-Dashboard — Systemstatistiken, Connector-Metriken, Token-Nutzungsdiagramme.
- JWT-Authentifizierung — Token-basierte SSE-Authentifizierung, Gesprächseigentümerschaft.
- Admin-API — Agent-Verwaltung, benutzerspezifisches Token-Kontingent (429-Durchsetzung).
[v0.7] - 2026-03-06
Hinzugefügt
- Admin Platform — Benutzerverwaltung, Rollenwechsel, Passwort-Reset, Konto aktivieren/deaktivieren.
- First-run setup wizard — Geführte Erstellung des Admin-Kontos.
- Personal Center — Benutzerspezifische globale Anweisungen, Spracheinstellung.
[v0.6.5] - 2026-03-05
Hinzugefügt
- Utility-Tools —
email_send,json_transform,template_render,text_utils. - Connector-Antwortfilterung —
CONNECTOR_RESPONSE_MAX_CHARSundCONNECTOR_RESPONSE_MAX_ITEMS. - Einbettungsmodell-Optionen — Jina, OpenAI und benutzerdefinierte Anbieter.
[v0.6] - 2026-03-01
Hinzugefügt
- Connector Platform — Vollständiges CRUD, ConnectorToolAdapter, benutzerspezifische Anmeldedaten-Verschlüsselung, Bestätigungsgate, Circuit Breaker, Audit-Logging.
- MCP integration — Automatische Tool-Erkennung über das Protokoll, Prozessisolierung.
[v0.5] - 2026-02-28
Hinzugefügt
- Vollständige RAG-Pipeline — Jina-Einbettung + LanceDB + FTS + RRF + Reranker.
- Fundierte Generierung — Evidenzbasierte Zitierungen, Konflikterkennung, Konfidenzwerte.
- KB-Dokumentenverwaltung — CRUD auf Chunk-Ebene, Suche, Wiederholung, Schema-Migration.
- ContextGuard + Angeheftete Nachrichten — Token-Budget-Manager.
- DAG-Neuplanung — Bis zu 3 Runden; LLM Compact für den Speicher.
[v0.4] - 2026-02-25
Hinzugefügt
- Mehrstufige Konversationen — DbMemory-Persistenz, intelligente Kürzung.
- Tool-Schritt-Faltung UI — Tool-Aufrufe ein-/ausklappen.
- HTTP-Anfrage + Shell-Ausführungs-Tools.
- Agent-Verwaltung — Erstellen, konfigurieren, veröffentlichen mit gebundenen Modellen/Tools.
- JWT-Authentifizierung.
[v0.3] - 2026-02-25
Hinzugefügt
- Web-Tools —
web_search(Jina/Tavily/Brave),web_fetch. - Dateioperationen + MCP-Client.
- DAG-Visualisierung — Interaktiver Flussgraph mit Live-Status.
- Code-Ausführung in Docker —
--network=none, Speicherlimits, Timeout.
[v0.2] - 2026-02-24
Hinzugefügt
- Retry & Rate Limiting — Exponentielles Backoff.
- Nutzungsverfolgung — Token-/Kostenabrechnung pro Anfrage.
- Nativer Funktionsaufruf — Direkte Modell-Tool-Auswahl.
- Multi-Modell-Unterstützung —
FAST_LLM_MODELfür DAG-Schritte. - Speichersystem — Window-, Summary-, Db-Speicher.
- FastAPI-Backend —
/api/execute,/api/stream(SSE).
[v0.1] - 2026-02-22
Hinzugefügt
- ReActAgent — Reason → Act → Observe-Schleife.
- DAGPlanner — LLM-generierte Abhängigkeitsgraphen, parallele Ausführung, Ergebnisverifizierung.
- Tools — Taschenrechner, Python-Ausführung.
- Portal UI — Next.js mit Streaming, Dark/Light-Theme, KaTeX.