Zum Hauptinhalt springen
Alle wichtigen Änderungen an diesem Projekt sind hier dokumentiert. Das Format folgt Keep a Changelog. Versionen entsprechen Roadmap-Meilensteinen.

[Unreleased]

Geändert

  • Agents übernehmen Fehler jetzt sauberer. Wenn ein Tool-Ergebnis etwas widerspricht, das ein Agent gesagt hat, erkennt er es an und korrigiert es in derselben Runde, ohne sich zu viel zu entschuldigen oder die Antwort mit Selbstkritik zu füllen.

Sicherheit

  • SSRF-Umgehung über IPv4-mapped IPv6-Adressen blockiert. Eine URL mit einem IPv4-mapped IPv6-Literal als Host (z. B. http://[::ffff:169.254.169.254]/) umging die Blocklist für private IPs und konnte auf Dual-Stack-Hosts auf interne Services — einschließlich Cloud-Instanz-Metadaten — zugreifen. Diese Adressen werden nun entpackt und gegen die IPv4-Blocklist 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 nun SSRF-validiert. Ein authentifizierter Benutzer konnte einen MCP-Server auf eine interne Adresse verweisen und eine Anfrage an ihn auslösen, wenn der Server getestet oder verbunden wurde. Server-URLs werden nun bei der Erstellung/Aktualisierung und erneut beim Verbinden validiert.
  • Docker Compose PostgreSQL-Anmeldedaten sind nun über POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB überschreibbar. Der zuvor hartcodierte Standard fim:fim ist einfach strukturiert (die Verbindungszeichenfolge wird aus denselben Variablen abgeleitet) und dokumentiert mit einer Warnung, ihn vor dem Freigeben der Datenbank zu ändern, sodass Operatoren nicht versehentlich Standard-Admin-Anmeldedaten ausliefern.

Behoben

  • Force-Logout vergleicht Zeitstempel jetzt korrekt auf PostgreSQL. Die Sitzungs-Invalidierungsprüfung nahm an, dass die gespeicherte Invalidierungszeit ein naives UTC war, und erzwang dies, was Vergleiche mit zeitzonenabhängigen Nicht-UTC-Werten, die PostgreSQL zurückgeben kann, stillschweigend beschädigte. Zeitstempel werden jetzt durch Konvertierung normalisiert, nicht durch Überschreibung, sodass widerrufene Token auf jedem Backend zuverlässig abgelehnt werden.
  • Enforcement Hooks schließen jetzt fehlgeschlagen, wenn sie abstürzen. Ein PRE_TOOL_USE Hook (z. B. ein Approval Gate), der eine Ausnahme auslöste, gab zuvor allow=True zurück, sodass der blockierte Tool-Aufruf trotzdem fortgesetzt wurde — ein abstürzender Gate wurde stillschweigend zu einem Bypass. PRE Hooks verweigern jetzt standardmäßig bei Fehlern; Nicht-Enforcement Hooks (Rate Limiter, Logger) behalten das alte Fail-Open-Verhalten über ein neues fail_open Flag bei.

[v0.8.7] - 2026-06-10

Sicherheit

  • Eine Umgehung der Zwei-Faktor-Authentifizierung wurde behoben. API- und Chat-/SSE-Authentifizierung erfordern nun ein echtes Zugriffstoken (SSE-Streaming akzeptiert auch 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 wiedergegeben werden, sodass ein gestohlenes Passwort allein nicht mehr die zweite Authentifizierungsfaktor umgehen kann.
  • OAuth-Anmeldung verknüpft sich nicht mehr automatisch mit einem vorhandenen Konto bei einer unverifizierten E-Mail. Ein Drittanbieter-Konto wird nur dann mit einem lokalen Konto per E-Mail abgeglichen, wenn der Anbieter diese E-Mail als verifiziert kennzeichnet, was eine Übernahme über eine von einem Angreifer kontrollierte unverifizierten Adresse verhindert.

Added

  • file_ops.apply_patch — apply V4A-format diff patches to files. Lets agents make multi-line edits with line-based hunks and fuzzy whitespace matching, complementing the existing find_replace for cases where exact substring match is brittle.
  • Content guardrails for input and output validation. A new core/agent/guardrail layer runs alongside (not replacing) existing tool-permission gates and security checks. Input guardrails (default: jailbreak phrase detector) run before any LLM call and abort the turn if triggered, saving tokens and surfacing a clear “blocked” notice in chat. Output guardrails run after the final answer. Configurable via FIM_GUARDRAILS_INPUT / FIM_GUARDRAILS_OUTPUT env vars; per-agent UI configuration coming in a future release.

Geändert

  • /settings?tab=billing wird jetzt in voller Breite angezeigt und ist visuell konsistent mit den anderen Einstellungs-Tabs. Die max-w-4xl-Breitenbegrenzung und der redundante äußere Scroll-Container wurden entfernt; das Seitentitel-Symbol wurde gelöscht; die Karten für Plan / Nutzung / Abonnement / Plan-Vergleich wurden umgeschrieben, um das gleiche schlanke Bordered-Div-Muster (kompakte Labels + tabular-nums-Zahlen) wie der Nutzungs-Tab zu verwenden. Das alte Layout sah wie eine eigenständige Seite aus, die versehentlich in den Einstellungs-Rahmen eingekeilt wurde.

Behoben

  • Token-Kontingent wird jetzt am Abrechnungsdatum zurückgesetzt, nicht am 1. des Monats. Die Nutzung wurde immer pro Kalendermonat gezählt, unabhängig davon, wann Sie sich anmeldeten. Bezahlte Nutzer konnten am 20. abgerechnet werden, mussten aber bis zum 1. auf ein neues Kontingent warten – und ein Abonnement, das spät im Monat begonnen wurde, gewährte effektiv wenige Tage später ein zweites volles Kontingent. Das Kontingent wird jetzt am monatlichen Jahrestag jedes Abonnements zurückgesetzt (kostenlose Nutzer werden weiterhin am Kalendermonat zurückgesetzt). Jährlich abgerechnete Pläne werden korrekt jeden Monat aufgefüllt, nicht nur einmal im Jahr. Die Registerkarte „Plan & Abrechnung”, die Nutzungskarte und der Dialog „Kontingent überschritten” messen die Nutzung und zeigen das Zurücksetzdatum über dieses gleiche Zeitfenster an, sodass die angezeigte „Nutzung in diesem Zeitraum” dem Punkt entspricht, an dem der Chat Sie tatsächlich stoppt.
  • Abonnementverlängerungen verschieben jetzt den Abrechnungszeitraum. Bei der automatischen Verlängerung blieb das angezeigte Enddatum des Zeitraums beim vorherigen Zyklus stehen, obwohl Stripe abgerechnet und das Abonnement vorwärts gerollt hatte – der Verlängerungshandler las den neuen Zeitraum nur aus der Rechnungs-Payload, wo er unzuverlässig ist. Er ruft jetzt die maßgeblichen Zeitraumgrenzen von Stripe ab, sodass das Zyklus-Enddatum (und das Kontingent-Zurücksetzen) bei jeder Verlängerung vorwärts rücken. Dies beseitigt auch ein latentes Risiko, bei dem das Kündigen eines solchen Abonnements das Konto sofort statt am echten Zeitraumende herabstufen könnte.
  • Rohes Tool-Call-Protokoll leckt nicht mehr in Agent-Antworten. Wenn ein Modell einen Tool-Call als Klartext improvisiert (z. B. durch Ausgabe von <tool_call>/<tool_response> Blöcken – häufig, wenn es nach einem nicht verfügbaren Tool greift), konnte dieser Text – einschließlich aller Base64/Datei-Dumps darin – wörtlich in der Antwort auftauchen. Alle Antwortpfade entfernen jetzt dieses Pseudo-Protokoll, und der Parser erkennt zusätzlich den {"name","arguments"} Dialekt als echten Tool-Call statt ihn zu lecken.
  • Intermittierende APIConnectionError: Connection error Ausbrüche während Agent-Durchläufen. Der gemeinsame HTTP-Verbindungspool behielt Idle-Keep-Alive-Verbindungen bis zu 30 s; wenn ein vorgelagertes Relay oder NAT eine Idle-Verbindung stillschweigend aufräumte, wiederverwendete die nächste Anfrage den halb-toten Socket und schlug fehl. Die Keep-Alive-Ablaufzeit beträgt jetzt standardmäßig kurz 5 s (warme Verbindungen innerhalb eines Durchlaufs werden weiterhin wiederverwendet), und der Pool ist über LLM_HTTP_MAX_CONNECTIONS / LLM_HTTP_MAX_KEEPALIVE / LLM_HTTP_KEEPALIVE_EXPIRY abstimmbar – setzen Sie LLM_HTTP_MAX_KEEPALIVE=0, um die Verbindungswiederverwendung hinter einem unzuverlässigen vorgelagerten System vollständig zu deaktivieren.
  • API-Schlüssel-Nutzungsstatistiken (total_requests, last_used_at) werden jetzt bei jeder Anfrage beibehalten. Zuvor wurde die Erhöhung in der Datenbanksitzung der Anfrage geschrieben, die nur von Endpunkten committed wird, die ihre eigenen Schreibvorgänge durchführen – sodass schreibgeschützte API-Schlüssel-Aufrufe (Dashboard, Dateien, Modelle, Exporte, …) den Zähler stillschweigend zurückrollten. Die Nutzung wird jetzt in einer unabhängigen, selbst-committenden Sitzung aufgezeichnet, entkoppelt vom Anfrageerfolg.

[v0.8.6] - 2026-05-08

Added

  • Stripe-Abrechnung — Pro-Plan-Abonnement. Neue Registerkarte Plan & Billing unter /settings?tab=billing zeigt den aktuellen Plan, monatliche Token-Nutzung, Periodenzurückstellung und entweder Upgrade to Pro (Stripe Checkout) oder Manage subscription (Customer Portal). Nach erfolgreichem Checkout öffnet sich ein Konfetti-Modal mit dem gekauften Plan; Umleitungsparameter werden nur nach dem Schließen entfernt, sodass ein Aktualisieren es nicht erneut auslöst. Die Kontingentdurchsetzung berücksichtigt den Plan jedes Benutzers; stornierte Abonnements bleiben bis zum Ende des bezahlten Zeitraums im Pro-Plan; der Mid-Stream-402-Kontingentdialog landet jetzt auf der Abrechnungsregisterkarte. Administratoren verwalten Pläne und durchsuchen Abonnements unter Admin Panel → Billing. Pro verwendet derzeit einen Stripe test-mode-Preis; die Produktionsumstellung ersetzt die Preis-ID.
  • Von Admin gesteuerte Abrechnungs-Feature-Flag. Der Schalter Enable Stripe Billing in Admin → System Settings steuert die gesamte Stripe-Pipeline — benutzergerichtete /api/billing/*, Stripe-Webhook, Admin-Plan/Abonnement-CRUD und Frontend-Abrechnungsregisterkarte + Admin-Navigation sind alle ausgeblendet oder geben 503 zurück, wenn deaktiviert. Die erste Aktivierung erstellt Free + Pro, setzt den default_plan_id-Zeiger und füllt users.plan_id rückwirkend auf; nachfolgende Aus-/Einschaltungen sind reine Flag-Umschaltungen. Private Bereitstellungen ohne Stripe-Anmeldedaten bleiben sauber. Die Kontingent-Kette fällt auf das von Admin festgelegte Default Monthly Token Quota zurück, wenn die Abrechnung deaktiviert ist.
  • Unbegrenztes Pro-Benutzer-Kontingent + Registered-Spalte. Ein leeres Kontingentfeld erbt das globale Limit; 0 gewährt unbegrenzt. Zuvor waren beide in denselben Zustand zusammengefallen. Die Benutzertabelle erhält auch eine Spalte Registered.
  • Nicht-englische Dokumentation (zh / ja / ko / de / fr) zeigt jetzt die vollständige API Reference und Channels Configuration-Abschnitte — die Gruppe Endpoints und die Untergruppe Configuration > Channels waren zuvor nur auf Englisch verfügbar.

Geändert

  • Plan & Billing ist ein Einstellungen-Tab, keine eigenständige Seite. /settings/billing wurde zurück in /settings?tab=billing integriert, damit die linke Navigation sichtbar bleibt, während Benutzer Pläne wechseln (wie bei GitHub / Linear / Notion). Die eigenständige Route leitet weiter, sodass alte Lesezeichen und frühere Stripe-Checkout-Return-URLs funktionieren. Der Tab Subscriptions wird in Marketplace umbenannt, um Verwechslungen mit Plan-Abonnements zu vermeiden.
  • Das Kontingent des kostenlosen Plans ist auf der Admin-Seite „Plans” schreibgeschützt. Es wird aus Systemeinstellungen → Standard-Monats-Token-Kontingent bezogen; Änderungen dort werden automatisch propagiert. Das Backend ignoriert monthly_token_quota bei PATCH für den kostenlosen Plan stillschweigend.
  • Token-Kontingente werden als 5M / 100K statt 5,000,000 auf der Abrechnungsseite, Plan-Karten und Admin-Plans-Tabelle angezeigt. Admin-INPUT-Felder akzeptieren weiterhin Rohzahlen.
  • Übersetzungsautorität verschoben von einzelnen Locale-Dateien zu einem zentralen Glossar. Regeln befinden sich in scripts/translation-glossary.md, geladen in jeden LLM-Übersetzungsaufruf (JSON, MDX, README). Der Pre-Commit-Hook verweigert bedingungslos manuelle Änderungen an generierten Locale-Dateien. Um eine Fehlübersetzung zu beheben, bearbeiten Sie das Glossar und regenerieren Sie mit --force.
  • 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 zu Singapur; Streitigkeiten werden durch SIAC-Schiedsverfahren in Singapur beigelegt (ein Schiedsrichter, Englisch). Eine neue Top-Level-Datei NOTICE dokumentiert F&E-Zuschreibung, Marken und die Richtlinie für Drittanbieter-Komponenten. Keine Änderung an den zulässigen Verwendungen oder Beschränkungen.

Behoben

  • Admin-Genehmigung/Ablehnung von Agenten, Konnektoren, Wissensdatenbanken und MCP-Servern schlägt auf PostgreSQL nicht mehr fehl. Die Spalte reviewed_at in der Publish-Review ist jetzt zeitzonen-bewusst, sodass Genehmigungsschreibvorgänge auf PG erfolgreich sind (der Fehler war auf SQLite-Entwicklungsdatenbanken unsichtbar).
  • OAuth-Benutzer können ihre Sitzung jetzt wieder aktualisieren. Das von OAuth ausgegebene Aktualisierungstoken wurde in einer Form gespeichert, die der Aktualisierungsendpunkt nie abgleichen konnte, was nach Ablauf des Zugriffstokens zu einer erneuten Anmeldung führte; es wird jetzt wie jeder andere Pfad als Digest gespeichert.
  • Der Browser-Registerkartentitel spiegelt jetzt den aktiven Unter-Tab in /settings und /admin wider (z. B. Settings · Billing — FIM One), sodass mehrere angeheftete Registerkarten unterscheidbar sind.
  • Die Nutzungsseite meldet nicht mehr “Unlimited”, wenn ein Administrator ein Standard-Token-Kontingent festgelegt hat — sie wird jetzt über die einheitliche Kontingentkette aufgelöst (Benutzer-Override → Plan-Tier → Systemstandard).
  • Agent-Einstellungen: Gebundene Ressourcen flackern beim Eintritt nicht mehr als “(已删除)” Orphan-Badge wartet, bis sich Bestandsabrufe stabilisieren, bevor es gerendert wird.
  • Toasts folgen jetzt dem Hell-/Dunkelmodus statt fest auf Dunkel codiert zu sein.
  • Die Nutzungsaufschlüsselung nach Agent dupliziert nicht mehr “Direct Chat”-Zeilen für Konversationen, die an gelöschte Agenten gebunden sind.
  • Self-Hosted ./deploy.sh schlägt nicht mehr mit container name already in use fehl — bereinigt Hash-Präfix-Zombie-Container und DooD-Sandbox-Kinder vor docker compose up.
  • Keine redundanten chore(i18n): sync translations-Commits mehr nach Pushes — der Pre-Commit-Übersetzungs-Hook stellt .translation-cache.json neben übersetzten Dateien bereit.
  • Agent-Chat stürzt nicht mehr ab, wenn ein genehmigungspflichtiges Tool in einer ungebundenen Agent-Sitzung ausgeführt wird — das Gate weicht elegant aus, wenn es keinen Agent zum Weiterleiten gibt.
  • Wiederholung schlägt nicht mehr bei Strict-Alternation-Providern (Claude) fehl, wenn der Verlauf verwaiste Benutzernachrichten aus gestoppten Turns enthält — aufeinanderfolgende Nachrichten derselben Rolle werden vor dem Versand zu einem einzelnen Turn zusammengefasst.
  • Playground-Wiederholung zeigt die Abfrage während des Pre-Stream-Fensters nicht mehr kurzzeitig zweimal an.
  • ReAct-Agent bestätigt jetzt und stoppt, nachdem ein Operator eine Genehmigungsanfrage ablehnt, statt umformulierte Tool-Aufrufe erneut zu versuchen.
  • Playground “Suggested follow-ups” kehrt zurück und ist jetzt pro Agent opt-in (Standard aus; neuer Toggle “Follow-up Suggestions” in Agent-Einstellungen).

[v0.8.5] - 2026-04-23

Hinzugefügt

  • Contributor-freundlicher i18n-Workflow: Mitwirkende müssen LLM_API_KEY nicht mehr konfigurieren, um PRs einzureichen, die englische Quelldateien ändern. 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 auf master, nachdem der PR zusammengeführt wird, und committed das Ergebnis automatisch. Der Pre-Commit-Hook verweigert jetzt auch manuelle Änderungen an generierten Locale-Dateien (mit einem ALLOW_LOCALE_EDIT=1-Override für legitime Übersetzungskorrektionen) und verhindert damit stille Abweichungen 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] automatisch auf master committed, um Rekursion zu verhindern.
  • Exa-Integrationsdokumentationsseite: Dedizierter Integrations-Bereich in der Seitenleiste mit einer erstklassigen Exa-Seite, die die gesamte Exa-Suchoberfläche abdeckt (neural / fast / deep-reasoning / instant), Filterung, Inhaltsabruf und drei optimierte Voreinstellungen für Nachrichtenüberwachung, Abruf von Forschungsarbeiten und Deep-Reasoning-Agenten. Dient als Partner-Landing-Page für das Exa-Integrationsverzeichnis.
  • Xinchuang (信创) Datenbankunterstützung: Der Database Connector listet jetzt KingbaseES (人大金仓), HighGo (瀚高) und DM8 (达梦) neben PostgreSQL/MySQL auf. KingbaseES und HighGo sind PG-kompatibel und verwenden asyncpg ohne zusätzliche Abhängigkeiten; DM8 verwendet das offizielle dmPython-Vendor-Wheel. Ein eigenständiges scripts/test_xinchuang_dbs.py ermöglicht es Betreibern, Live-Konnektivität über die CLI zu verifizieren.
  • Feishu Channel + Bestätigungsgate über IM: Ein neuer Channel-Ressourcentyp (org-scoped, Anmeldedaten im Ruhezustand verschlüsselt) ermöglicht es Organisationen, eine Feishu-App für ausgehende Nachrichten zu verbinden. Tools mit requires_confirmation=True senden jetzt eine interaktive Approve/Reject-Karte an die konfigurierte Feishu-Gruppe, anstatt nur den Bestätigungsdialog im Portal anzuzeigen — jedes autorisierte Mitglied der Gruppe kann direkt aus Feishu genehmigen oder ablehnen. Umfasst die Verwaltungs-UI für Einstellungen → Kanäle (Liste, Erstellen/Bearbeiten mit Dirty-State-Schutz, Details mit kopierbarer Callback-URL, Test-Versand), 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 Integration Roadmap-Elements, wird vor dem Zeitplan für die 2026-04-24 Roadshow ausgeliefert.
  • Agent Hook System (Grundgerüst): Eine neue PreToolUseHook / PostToolUseHook-Abstraktion in src/fim_one/core/hooks/ ermöglicht es, dass deterministische Logik außerhalb der LLM-Schleife ausgeführt wird — der FeishuGateHook ist die erste konkrete Implementierung, die an den Bestätigungsgate-Flow angehängt ist. Vollständiger Hook-Lebenszyklus + benutzerdefinierte YAML-Hooks bleiben v0.9-Umfang.
  • Hook System ist jetzt in der ReAct- und DAG-Runtime live: Agenten, die hooks.class_hooks in ihrer model_config_json deklarieren, haben diese Hooks auf jeder Chat-Sitzung instanziiert und registriert. Der erste Consumer — FeishuGateHook — wird automatisch ausgelöst, wenn ein Agent ein Tool aufruft, dessen Connector-Aktion mit requires_confirmation=True gekennzeichnet ist, postet eine Approve/Reject-Karte an die Feishu-Gruppe der Organisation, blockiert das Tool und setzt fort oder bricht basierend auf dem Urteil ab. Zuvor war die Hook-Abstraktion vorhanden, aber nichts in der Web-Schicht verband sie mit Live-Chat.
  • Kanäle und Hook System-Architektur dokumentiert: Eine neue docs/architecture/hook-system.mdx erklärt die drei Hook-Punkte, warum Hooks außerhalb der LLM-Schleife ausgeführt werden, und führt FeishuGateHook end-to-end durch. Bestehende Architekturseiten (system-overview, organization, react-engine, philosophy) verlinken darauf. Die README listet jetzt Messaging Channels als erstklassige v0.8-Fähigkeit auf und das Application Layer-Diagramm enthält IM-Ziele neben Portal/API/iframe.
  • Hook Approval Playground: Das Channels-Detailblatt hat jetzt eine “Test Approval Flow”-Aktion, die einen sensiblen Tool-Aufruf simuliert, eine echte Bestätigungskarte an die verknüpfte Feishu-Gruppe pusht und die Entscheidung des Prüfers live abfragt. Im Gegensatz zur bestehenden Vorschau-Schaltfläche wird hier der vollständige Produktionspfad ausgeübt (echte ConfirmationRequest-Zeile, echter Feishu-Callback, Statusübergänge), sodass Demos und Pre-Rollout-Proben denselben Code-Pfad verwenden, den ein Production Hook verwenden würde.
  • Pro-Agent-Aufgabenabschlussbenachrichtigungen: Agenten können jetzt eine Zusammenfassungskarte an den Organisationskanal (derzeit Feishu) pushen, wenn eine lang laufende ReAct- oder DAG-Aufgabe abgeschlossen ist. Konfigurierbar pro Agent in Einstellungen → Agent → Benachrichtigungen. Erster Consumer des generischen ausgehenden Benachrichtigungsmusters.
  • Konfigurierbares Bestätigungsgate — inline oder Kanal: Jeder Agent hat jetzt einen “Approval”-Bereich in den Einstellungen mit drei Routing-Modi (Auto / Nur Inline / Nur Kanal), einem Approver-Scope-Selector (Initiator / Agent-Besitzer / Jeder in der Organisation), einem “Bestätigung für jeden Tool-Aufruf erforderlich”-Override und einem expliziten Approval-Channel-Picker. Der Auto-Modus verwendet einen verknüpften Kanal, falls vorhanden, und fällt elegant auf eine Inline-Bestätigungskarte im Chat-Stream zurück — sodass Agenten ohne Kanal immer noch eine echte Approval-UX erhalten, anstatt stillschweigend zu fehlschlagen. Ein neuer POST /api/confirmations/{id}/respond-Endpunkt teilt einen einzelnen Entscheidungsaufzeichnungspfad mit dem Feishu-Webhook, sodass jede Genehmigung — ob im Chat oder in einer Feishu-Gruppe angeklickt — dieselben approver_user_id- und decided_at-Audit-Felder stempelt.

Geändert

  • Playground-Ladenindikatoren verwenden jetzt einen subtilen Text-Shimmer-Effekt statt der unrealistisch aussehenden Fortschrittsleiste, die sich nach 8 Sekunden bei einer Pseudo-Vollbreite eingefroren hat. Die beiden bestehenden Shimmer-Implementierungen (.shiny-text und .text-shimmer) wurden in ein einzelnes Design-System-Primitiv mit optionalem Warm-Preset vereinheitlicht.
  • Connector-Karten zeigen jetzt ein „Private default”-Badge (mit Tooltip) an, wenn ein Connector allow_fallback deaktiviert hat, damit Besitzer auf einen Blick sehen können, welche Connectoren erfordern, dass jeder Benutzer seine eigenen Anmeldedaten mitbringt. Der Hilfetext unter dem Allow-Fallback-Toggle in der Connector-Einstellungsform verdeutlicht auch, dass das Flag nur die Freigabe für andere Benutzer steuert – der Besitzer kann immer seine eigenen Standard-Anmeldedaten verwenden.

Behoben

  • Connector-Aufrufe, die vom Eigentümer eines Connectors mit allow_fallback=false und nur einer Standard-Anmeldedaten (keine benutzerspezifischen Anmeldedaten) durchgeführt werden, führen nicht mehr zu 401 mit “Requires authentication”. Der Eigentümer ist nun von der Fallback-Gate ausgenommen — dieses Flag steuert nur, ob andere Benutzer die Standard-Anmeldedaten des Eigentümers verwenden dürfen. Zuvor sendeten die eigenen Agenten des Eigentümers stillschweigend unauthentifizierte Anfragen, und das gleiche Problem betraf auch Workflow-connector_action-Knoten.
  • Der Gesprächsexport zeigt nun das korrekte Modusbezeichnung (“Planner” / “规划”) für automatisch geroutete DAG-Gespräche an, anstatt immer “Standard” anzuzeigen.
  • Exportzeitstempel berücksichtigen nun die konfigurierte Zeitzone des Benutzers, anstatt rohe UTC anzuzeigen.
  • Hochgeladener Dateiinhalt wird nicht mehr in exportierte Gespräche durchsickern; nur der Nachrichtentext des Benutzers ist enthalten.
  • Parallele Tool-Aufrufe kollidieren nicht mehr, wenn ein Provider index=0 für jeden gestreamten Tool-Call-Delta wiederverwendet; der Aggregator erkennt nun Grenzen über ID- oder Namensänderung und ordnet nachfolgende Deltas dem korrekten Slot zu.
  • Einstellungen → Kanäle spiegelt nun die Organisationsrolle des aktuellen Benutzers wider: Mitglieder (Nicht-Admin/Eigentümer) sehen eine deaktivierte Schaltfläche “Neuer Kanal”, verborgene Aktionen Bearbeiten / Aktivieren-Deaktivieren / Löschen, ein schreibgeschütztes Banner und einen berechtigungsabhängigen leeren Zustand — anstatt eines aktivierten CTA, das bei der Übermittlung mit “Organization admin access required” fehlschlägt.
  • Die Umleitung bei Sitzungsablauf bewahrt nun die Abfragezeichenfolge, sodass Benutzer nach der erneuten Authentifizierung auf die genaue Registerkarte / den Filter landen, den sie angesehen haben, anstatt auf den bloßen Pfad.
  • Das Feishu-Kanalformular zeigt nicht mehr eine fehlerhafte Aufforderung “Ungespeicherte Änderungen verwerfen” an, wenn mit der Chat-Auswahl interagiert wird, die über dem Dialog liegt.
  • Feishu-Kanal-Setup-Hinweise duplizieren nicht mehr chinesische Bezeichnungen, wenn die Benutzeroberfläche selbst bereits auf Chinesisch ist (z. B. wurde zuvor “事件与回调 (事件与回调)” angezeigt).
  • “Alle kommentieren” im Schema-Manager gibt nicht mehr 500 Internal Server Error zurück — der Full-Annotate-Backend-Pfad hatte einen Fehler mit ungebundener Variable, der jeden Aufruf blockierte.
  • Das Bearbeiten eines Datenbank-Connectors zeigt nun den Platzhalter ******** im Passwortfeld anstelle von drei Punkten maskiertem Text, was deutlich macht, dass das Feld leer lassen das gespeicherte Passwort beibehält.
  • Das Aktualisieren einer Connector-Aktion bricht das Detailpanel nicht mehr zusammen — die bearbeitete Aktion bleibt ausgewählt, sodass Benutzer weiterhin daran arbeiten können.
  • Der KI-Connector-Editor unterscheidet nun zwischen Erfolg, teilweisem Fehler und vollständigem Fehler, anstatt für alle drei die gleiche “completed”-Meldung anzuzeigen. Fehlerursachen werden inline angezeigt, sodass Benutzer sehen können, was tatsächlich schiefgelaufen ist.
  • Der KI-Connector-Editor kann nicht mehr mehrere Aktionen auf einmal stillschweigend löschen. Massenlöschung (>2 Aktionen) erfordert nun ein explizites destruktives Schlüsselwort in der Anweisung des Benutzers (“rebuild”, “全部重建”, “wipe” usw.); andernfalls wird der Vorgang mit einer klaren Fehlermeldung abgelehnt, die requires_confirmation- und JMESPath-Einstellungen vor versehentlichem Verlust schützt.
  • Bestätigungskarten im Portal-Chat zeigen nun an, ob die Anfrage an einen Kanal (z. B. Feishu) weitergeleitet oder inline verarbeitet wurde, zusammen mit einem benutzerfreundlichen Hinweis darauf, wer genehmigen darf (der Initiator, der Agent-Eigentümer oder ein beliebiges Organisationsmitglied). Kanal-geroutete Anfragen erzeugen auch eine inline ausstehende Karte, sodass der Benutzer nicht im Unklaren bleibt, 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 Schaltflächen Genehmigen/Ablehnen entfernt und die Kopfzeile grün (genehmigt) oder rot (abgelehnt) gefärbt ist, was wiederholte Klicks verhindert. Doppelte Klicks, die noch von veralteten Feishu-Clients ankommen, erhalten einen Toast “This request was already approved/rejected.” und eine frische Kopie der entschiedenen Karte, sodass die veraltete Ansicht aufgeholt wird.
  • Die einfache Aktion “Send Test Message” auf Kanalzeilen und dem Detailblatt wurde wiederhergestellt. Der Approval Playground übt den vollständigen Hook-Roundtrip, aber ein reiner Benachrichtigungskanal (kein Genehmigungshook verdrahtet) benötigt immer noch eine schnelle Sanity-Überprüfung der Anmeldedaten/Konnektivität, die der einfache Test-Send abdeckt.
  • Gleichzeitige Klicks auf die gleiche Feishu-Genehmigungskarte können nicht mehr beide erfolgreich sein. Der /callback-Handler wechselt nun den ConfirmationRequest-Status über ein bedingtes UPDATE ... WHERE status='pending' und verwendet die betroffene Zeilenanzahl, um zu entscheiden, welcher Aufrufer “gewonnen” hat; zuvor konnten zwei parallele Anfragen beide pending lesen und einen Schreibvorgang durchführen, was möglicherweise zu genehmigt-dann-abgelehnt in der gleichen Zeile führte.
  • Ausstehende Genehmigungsanfragen verfallen nun automatisch nach CHANNEL_CONFIRMATION_TTL_MINUTES (Standard 24h) über einen Hintergrund-Sweeper. Verhindert, dass ein veralteter Klick Tage später den Agent-Status umschaltet, der bereits abgebaut wurde; der nächste Klick auf eine abgelaufene Karte erhält eine graue “Expired”-entschiedene Karte und einen “no longer active”-Toast.
  • Send Test Message liefert nun eine einfache Textbenachrichtigung (keine Schaltflächen Genehmigen/Ablehnen) und befindet sich nur im Detailblatt des Kanals — nicht im Zeilendropdown. Benutzer, die Genehmigungshooks nicht verwenden möchten, werden nicht durch interaktive Schaltflächen auf einer “Test”-Nachricht verwirrt. Das Testen des Genehmigungsroundtrips bleibt über die Schaltfläche Approval Playground verfügbar.
  • Kanaldetailblatt gestrafft: “How to finish setup” ist nun ein standardmäßig eingeklappter Abschnitt (sodass er das Blatt für bereits konfigurierte Kanäle nicht dominiert), und der äußere Abstand wurde reduziert, sodass der Inhalt näher an der Blattkante sitzt.
  • Builder AI meldet maskierte (****) Anmeldedaten nicht mehr als fehlend — es erkennt sie nun als konfiguriert und überspringt falsche “credential missing”-Anleitungen.
  • Die Playground-Agentenliste zeigt nun alle zugänglichen Agenten anstelle von nur veröffentlichten, sodass Entwurfsagenten getestet werden können, ohne sie zuerst zu veröffentlichen.
  • Chat-Bild-Uploads stürzen den Stream nicht mehr bei fehlgeformten data:-URLs ab — der MIME-Extraktor fällt nun sicher auf application/octet-stream zurück, anstatt während der Generierung einen IndexError auszulösen.
  • Playground-Bild-Miniaturansichten brechen nun in-flight-Abrufe bei Unmount über AbortController ab, wodurch veraltete Blob-URL-Zuweisungen und verschwendete Bandbreite während schneller Navigation vermieden werden.

[v0.8.4] - 2026-04-17

Hinzugefügt

  • Conversation recovery: Synthetische tool_result-Zeilen bleiben nach einer unterbrochenen Runde erhalten; Clients können einen unterbrochenen SSE-Stream über POST /chat/resume mit dem zuletzt gesehenen Cursor fortsetzen.
  • Playground verbindet unterbrochene SSE-Streams jetzt automatisch wieder mit dem /chat/resume-Endpunkt und exponentiellem Backoff (max. 3 Versuche); zeigt während der Wiederherstellung einen “Reconnecting…”-Indikator an.
  • Prompt-Cache-Observability: cache_read_input_tokens und cache_creation_input_tokens werden aus LLM-Antworten erfasst, pro Runde in TurnProfiler aggregiert, als turn_cache-Zusammenfassungszeile (read/create tokens + geschätzte Einsparungen) protokolliert und in der Chat-done_payload unter einem neuen cache-Feld angezeigt. Ermöglicht die Überprüfung, dass Anthropic-Prompt-Caching tatsächlich trifft, und dient gleichzeitig als Detektor dafür, ob API-Relaystationen den Cache-Rabatt berücksichtigen.

Geändert

  • Systemaufforderungen verwenden jetzt ein memoized Section Registry mit Anthropic Prompt-Caching-Haltepunkten auf dem stabilen Präfix – reduziert die Token-Kosten pro Durchgang um ~60-80% auf dem gecachten Präfix für Claude-Modelle. ReAct JSON-Modus, nativer Function-Calling-Modus und Synthese geben zwei Systemmeldungen für Cache-fähige Provider (Claude, Bedrock Anthropic, Vertex Claude) aus und fallen auf eine einzelne verkettete Meldung für alle anderen Provider zurück.

Behoben

  • Thinking/Reasoning-Token bleiben nun über mehrteilige Konversationen hinweg erhalten — das Anthropic-Feld signature wird erfasst und gemäß API-Anforderungen pro Durchlauf erneut abgespielt.
  • Provider-bewusste Reasoning-Replay-Richtlinie: reasoning_content (von DeepSeek-R1, Qwen QwQ, Gemini Thinking, OpenAI o-Serie) wird bei nachfolgenden Durchläufen nicht mehr an Nicht-Anthropic-Provider zurückgespielt. Zuvor wurde das Feld bedingungslos in ChatMessage.to_openai_dict() serialisiert, was gegen Provider-Dokumentation verstieß (DeepSeek und Qwen dokumentieren beide explizit „senden Sie reasoning_content nicht in der Nachrichtenhistorie zurück”) und ihre automatischen Präfixe / KV-Caches bei jedem mehrteiligen Austausch stillschweigend ungültig machte. Die Richtlinie ist zentralisiert in core/prompt/reasoning.py — die Claude-Familie (einschließlich Bedrock- und Vertex-Proxys) spielt Thinking-Blöcke mit Signatur wie erforderlich weiterhin ab.

[v0.8.3] - 2026-04-16

Hinzugefügt

  • convert_to_markdown integriertes Tool — Neues universelles Agent-Tool, das beliebige Dateien, URLs, YouTube-Links oder Data URIs in sauberes Markdown mit Microsofts MarkItDown 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 Agent verfügbar — gleiche Stufe wie web_fetch. Wenn ein Vision-fähiges LLM konfiguriert ist, werden eingebettete Bilder und gescannte PDF-Seiten automatisch über das offizielle markitdown-ocr-Plugin OCR’d. Diese Funktionalität war zuvor in der Hintergrund-RAG-Erfassungspipeline verborgen; Agents haben sie jetzt im interaktiven Konversationspfad.
  • Dokument-OCR über markitdown-ocr — Eingebettete Bilder in DOCX / XLSX / PPTX und gescannte PDF-Seiten werden jetzt mit demselben Vision-fähigen LLM OCR’d, das der Rest von FIM One nutzt. Gilt sowohl für das integrierte convert_to_markdown-Tool als auch für die RAG-Erfassungspipeline, sodass Chat-Zeit-Konvertierung und Knowledge-Base-Erfassung byte-identisches Markdown für dieselbe Eingabe erzeugen.
  • Universelle Vision-Provider-Unterstützung für Dokument-OCR — Ein neuer LiteLLMOpenAIShim Duck-Type umhüllt jedes FIM One OpenAICompatibleLLM in der openai SDK’s .chat.completions.create(...)-API-Form und leitet dann durch litellm.completion() weiter. MarkItDown (das die openai SDK-Oberfläche hart codiert) kann jetzt Anthropic Claude, Google Gemini, Azure, Bedrock und jeden anderen von LiteLLM unterstützten Provider nutzen — ohne Pro-Provider-Adapter-Code in FIM One.
  • Vision-bewusste RAG-Erfassung — Knowledge-Base-Uploads von Office-Dokumenten und gescannten PDFs lösen jetzt das Standard-Vision-LLM des Workspace auf (DB-first, ENV-Fallback) und leiten es an MarkItDown für OCR während der Erfassung weiter. Null-Regression: Wenn kein Vision-fähiges Modell verfügbar ist, fällt die Erfassung stillschweigend in den reinen Text-Modus zurück — genau das Verhalten vor der Funktion.
  • Erweiterte MarkItDown-Formatunterstützung — RAG erfasst jetzt nativ .pdf, .msg (Outlook), .epub, .mp3, .wav und .m4a über MarkItDowns Audio-Transkriptions- und Outlook-Extras. YouTube-URLs fließen durch convert_to_markdown über markitdown[youtube-transcription].
  • LLM_SUPPORTS_VISION Umgebungsvariable — Optionales Opt-out (=false) für den ENV-Modus Dokument-OCR-Fallback. Standardverhalten ist optimistisch (true), das die gängigen ENV-Setups abdeckt (gpt-4o, claude-3-5-sonnet, gemini-1.5-pro/flash). Setzen Sie auf false nur, wenn Ihr ENV-konfiguriertes LLM_MODEL Vision nicht unterstützt (z. B. deepseek-v3, qwen-chat, llama-3.1, gpt-3.5-turbo, o1-mini), um einen fehlgeschlagenen Vision-Aufruf bei jedem Dokument-Upload zu überspringen. Wird vollständig ignoriert, wenn eine von Admin kuratierten ModelGroup aktiv ist — DB-Modus ist immer die Quelle der Wahrheit, wenn verfügbar.
  • Turn-Level-Profiler — Jeder ReAct-Turn protokolliert jetzt Phasen-Level-Timings (memory_load, compact, tool_schema_build, llm_first_token, llm_total, tool_exec) in einer einzelnen strukturierten Log-Zeile pro Turn. Umschaltbar über REACT_TURN_PROFILE_ENABLED (Standard: an; setzen Sie auf false für Null-Overhead No-op).
  • Strukturierte Compact-Arbeitskarte — Konversationskomprimierung parst jetzt ihre eigene 9-Abschnitt-Markdown-Ausgabe in eine typisierte WorkCard und führt neue Compacts in die vorherige ein, sodass Fehler und ausstehende Aufgaben aus früheren Teilen einer langen Sitzung über mehrere Komprimierungsrunden hinweg bestehen bleiben, anstatt von Grund auf neu zusammengefasst zu werden.

Geändert

  • Benutzerbasierte Ratenbegrenzung — Der LLM-Layer-Ratenbegrenzer verwaltet jetzt einen separaten Bucket pro Benutzer statt eines einzelnen prozessglobalen Buckets. Verhindert, dass ein störender Benutzer alle anderen Benutzer auf demselben Worker drosselt. Umschaltbar über LLM_RATE_LIMIT_PER_USER (Standard: aktiviert).

Behoben

  • Dangling tool_use recovery — Conversations interrupted mid-tool-execution (user Stop, SSE disconnect, crash) previously left an assistant message with a tool_use block and no matching tool_result, causing the next turn to crash with an opaque HTTP 400 from the LLM API. DbMemory.get_messages() now detects and repairs these dangling blocks on the read path with a synthetic [interrupted] tool_result. Raw DB log is not mutated.
  • Empty-content assistant messages with tool_calls no longer dropped — The DbMemory load-path filter previously silently discarded any assistant row with empty text content. Native function-calling intermediates (which carry only tool_calls, no text) were being wiped out. The filter now requires BOTH empty content AND no tool_calls.

[v0.8.2] - 2026-04-10

Added

  • Intelligent Document Processing (Vision-Aware) — Adaptive document handling based on model capabilities. When the target LLM supports vision (GPT-4o, Claude 3/4, Gemini), PDF pages are rendered as images and sent via vision content blocks for full visual fidelity. Text-only models fall back to pdfplumber text extraction. Two modes: Vision and Text-only. Configurable via DOCUMENT_PROCESSING_MODE, DOCUMENT_VISION_DPI, DOCUMENT_VISION_MAX_PAGES env vars. Per-model supports_vision toggle in Admin.
  • Document vision pipeline — DOCX, PPTX, and PDF files uploaded in chat now have their embedded images extracted and sent as vision content to the LLM when vision is enabled on the model.
  • Multi-turn vision persistence — Vision content from uploaded documents and images persists across conversation turns, so the model retains visual context throughout the conversation.
  • Smart PDF processing — Text-rich PDF pages extract text plus embedded images separately (saving tokens). Scanned or image-only pages render as full-page PNG for maximum fidelity.
  • Pre-built sandbox imageDockerfile.sandbox with common data-science packages (pdfplumber, Pillow, pandas, etc.) so AI code execution works out of the box in --network=none containers.
  • Resource Fork completion — All five resource types now support fork: Agent, Connector, Workflow, MCP Server, and Skill. KB fork removed (inherently user-local).

Geändert

  • Schnellere Chat-Antwort-Fertigstellung — SSE-Stream schließt sich sofort nach Abschluss des Agenten; Titelerzeugung und Folgeverbesserungsvorschläge laufen im Hintergrund statt die Antwort zu blockieren.
  • Intelligentere Kontext-Komprimierung — Konversationskomprimierung nutzt ein strukturiertes 9-Abschnitts-Format, das Schlüsselinformationen (ursprüngliche Anfrage, Fehler, ausstehende Aufgaben) über lange Sitzungen hinweg besser bewahrt.
  • Reduzierte Agent-Schleifen — Anti-Loop-Anweisungen zu Agent-Prompts hinzugefügt; Zyklus-Erkennungsschwelle gesenkt, sodass wiederholte identische Tool-Aufrufe früher erkannt werden.
  • Schnellerer Request-Start — LLM-Konfigurationssuchen und Domain-Klassifizierung laufen jetzt parallel, wodurch der Overhead pro Request um 400–1100ms reduziert wird.
  • Bessere Behandlung leerer Tools — Tools, die keine Ausgabe zurückgeben, erzeugen jetzt eine aussagekräftige Meldung statt bloßem „(no output)”, was unnötige Wiederholungen verhindert.
  • Automatische Bereinigung alter Tool-Ergebnisse — Tool-Ergebnisse älter als die 6 neuesten werden automatisch vor der Kontext-Komprimierung gelöscht, um Konversationen schlank zu halten.
  • Tool-Ergebnis-Aggregat-Budget — Gesamte Tool-Ergebnis-Token sind auf 40K pro Sitzung begrenzt; neue Ergebnisse werden gekürzt, wenn das Budget überschritten wird, um Kontext-Überfluss durch große API-Antworten zu verhindern.
  • Kontext-Überfluss-Automatische-Wiederherstellung — Wenn der LLM eine Anfrage wegen Kontext-Längenschwellwertüberschreitung ablehnt, komprimiert der Agent automatisch auf 50% und versucht es erneut, statt die gesamte Konversation zum Absturz zu bringen.
  • Schlüsselwort-basierte Tool-Auswahl — Wenn eine Abfrage offensichtlich einem bestimmten Tool nach Name oder Beschreibungs-Schlüsselwörtern entspricht, überspringt der Agent den LLM-basierten Tool-Auswahlaufruf und spart 200–500ms.
  • LLM-Verbindungs-Pooling — Alle LLM-API-Aufrufe teilen sich jetzt einen einzelnen Verbindungs-Pool mit optimierten Keepalive-Einstellungen, wodurch der Verbindungs-Overhead über die gesamte Sitzung reduziert wird.
  • Intelligentere Fertigstellungsprüfung — Der Verifikationsschritt nach der Antwort wird bei langen detaillierten Antworten (>200 Token) übersprungen, wodurch ein unnötiger LLM-Roundtrip entfällt.
  • Modell-Fallback bei Provider-Ausfall — Wenn das primäre Modell nicht verfügbar ist (Rate-Limit, überlastet oder ausgefallen), versucht der Agent automatisch erneut mit dem schnellen Modell statt zu fehlschlagen.

Behoben

  • Agent-Halluzinationen 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 Inhalt der Zieldatei. Eine Dateiintegritäts-Schutzmaßnahme im System-Prompt verhindert dies nun.
  • Datei-ID-Injection für Uploads — Hochgeladene Dateien enthalten nun ihre UUID file_id im Nachrichtenkontext, sodass der Agent direkt über read_uploaded_file auf sie zugreifen kann, ohne zu raten.
  • Vision-Toggle-Lesevorgänge aus neuer Modellstruktur — Das Flag supports_vision in Modellkonfigurationen wurde nicht korrekt aus der ORM-Struktur ModelGroup/ModelProviderModel gelesen. Behoben.
  • Verbesserte Fehlermeldungen für unlesbaren Dateien — Wenn Dateien nicht gelesen werden können, gibt das Tool nun spezifische Hinweise (Dateityp, Vision-Vorschlag) statt generischer Fehler zurück.

[v0.8.1] - 2026-03-29

Hinzugefügt

  • Zeitzonenbewusste Admin-Benachrichtigungen — Admin-Benachrichtigungs-E-Mails zeigen jetzt Ereigniszeiten in der konfigurierten Zeitzone jedes Empfängers an, anstatt immer UTC anzuzeigen.
  • Progressive Datenbankwerkzeug-Offenlegung — Ein einzelnes database Meta-Tool mit list_tables/discover/query Unterbefehlen ersetzt einzelne Pro-Tabellen-Tools. Konfigurierbar über die Umgebungsvariable DATABASE_TOOL_MODE (progressive Standard, legacy Fallback).
  • On-Demand-Werkzeugladung — Wenn mehr als 12 Tools verfügbar sind, ermöglicht ein request_tools Meta-Tool dem Agenten, zusätzliche Tools während des Gesprächs dynamisch zu laden, anstatt auf die anfängliche Auswahl beschränkt zu sein.
  • Progressive MCP-Werkzeug-Offenlegung — Ein einzelnes mcp Meta-Tool mit discover/call Unterbefehlen ersetzt einzelne Pro-Server-Tools. Konfigurierbar über die Umgebungsvariable MCP_TOOL_MODE (progressive Standard, legacy Fallback).
  • Pro-Turn-Token-Budget-Schutzschalter — Die Umgebungsvariable REACT_MAX_TURN_TOKENS bietet einen Notausschalter für unkontrollierte Agent-Schleifen. Standard 0 (unbegrenzt) — verwenden Sie stattdessen das Pro-Benutzer-token_quota für die tägliche Kostenkontrolle.
  • Pro-Modell Native Function Calling Umschalter — Die Einstellung tool_choice_enabled (ENV + Admin pro Modell) ermöglicht es Modellen, die erzwungene Werkzeugauswahl ablehnen, Level 1 zu überspringen und direkt zum JSON-Modus zu gehen. Konfigurierbar unter Einstellungen → Modelle → Erweitert.
  • DAG-Qualitätsüberholung — Fünf Verbesserungen: Modell-Upgrade auf allgemeines Modell für Nicht-Fast-Schritte; automatische Skill-Erkennung in der Planung; Zitierprüfer für juristische/medizinische/finanzielle Bereiche; strukturierte Inhaltskontext-Beibehaltung mit konfigurierbarem Kürzungsmultiplikator; Domänenklassifizierung im Router mit domänengesteuerter Modellauswahl.
  • Domänenmodell-Eskalation in ReAct — Spezialisierte Domänen (juristische/medizinische/finanzielle) eskalieren automatisch zum Reasoning-Modell mit obligatorischer Websuche und Zitierprüfung.
  • Dateianhang-Download — Dateikarten in Chat-Nachrichten können jetzt angeklickt werden, um die ursprüngliche Datei herunterzuladen.
  • Admin-Benachrichtigungs-Hauptschalter — Globaler Ein-/Ausschalter für Admin-E-Mail-Benachrichtigungen mit SMTP-Laufzeiterkennung. Zeigt ein Warnbanner an, wenn SMTP nicht konfiguriert ist, und deaktiviert alle Benachrichtigungssteuerelemente.
  • SMTP Reply-To Header — Die neue Umgebungsvariable SMTP_REPLY_TO ermöglicht Antworten an eine andere Adresse als den Absender.
  • Resource Fork Phase 1 (MCP Server + Skill) — Die Endpunkte POST /api/mcp-servers/{id}/fork und POST /api/skills/{id}/fork erstellen benutzergesteuerte tiefe Kopien mit visibility=personal und forked_from Abstammungsverfolgung. Verschlüsselte Umgebungsvariablen/Header werden beim MCP Server Fork übersprungen; Veröffentlichungsstatus wird beim Skill Fork übersprungen. Alembic-Migration fügt die Spalte forked_from zu beiden Tabellen hinzu. 41 Tests.
  • Workflow-Verbindungs-Abhängigkeits-Automatisches AbonnementDependencyAnalyzer._resolve_workflow löst jetzt rekursiv Sub-Workflow-Abhängigkeiten mit Zyklenerkennung (besuchter Satz) auf. Agent- und Sub-Workflow-Knoten werden korrekt als Inhaltsabhängigkeiten in Abhängigkeitsmanifesten hinzugefügt. Fehlende Ressourcen werden elegant behandelt (Warnung protokollieren, kein Fehler). 19 Tests.
  • Vorgefertigte Lösungsvorlagen (Market Seed Content) — 8 vertikale Lösungsvorlagen werden beim ersten Benutzer-Registrierungsereignis idempotent bootstrapped: Financial Audit, Contract Review, Data Reporting, IT Helpdesk, HR Onboarding, Sales Assistant, Content Writer, Meeting Summary. Jede bündelt einen Agent + Skill mit chinesischen SOPs. Veröffentlicht auf Market-Organisation (visibility=org, publish_status=approved) für sofortige Marketplace-Verfügbarkeit. 4 Tests.
  • ReAct-Zyklenerkennung — Deterministische Erkennung wiederholter identischer Werkzeugaufrufe. Injiziert eine Warnung nach 3 aufeinanderfolgenden Aufrufen mit denselben Argumenten und verhindert, dass Agenten bei fehlgeschlagenen 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 vorzeitige oder unvollständige Antworten zu reduzieren. Umschaltbar pro Agent-Instanz.

Geändert

  • Completion Checklist Min-Tools Threshold — Die Checkliste wird jetzt nur ausgelöst, wenn der Agent 3+ Werkzeugaufrufe getätigt hat (konfigurierbar über REACT_COMPLETION_CHECK_MIN_TOOLS). Einfache 1-2 Werkzeug-Aufgaben überspringen die Verifizierung, um unnötige Latenz zu vermeiden.
  • Dynamische System-Prompt-Budgetierung — Die feste SYSTEM_PROMPT_RESERVE (4K Token) wurde aus der Kontextbudgetberechnung entfernt. ContextGuard berücksichtigt den System-Prompt jetzt dynamisch und gibt jeder Iteration ~4K mehr nutzbaren Kontext.
  • Zentralisierte Werkzeugtrunkierung — Alle Werkzeugtypen delegieren die Trunkierung jetzt an ein gemeinsames Modul. Standardwerte konfigurierbar über TOOL_OUTPUT_MAX_CHARS, TOOL_OUTPUT_MAX_ITEMS, TOOL_OUTPUT_MAX_BYTES Umgebungsvariablen.
  • Domänenerkennung entkoppelt — Die Domänenklassifizierung läuft unabhängig in jedem Endpunkt, nicht mehr mit Auto-Routing gebündelt. Domänen-SOP-Anweisungen wurden gelockert, um eher zu leiten als zu mandatieren, Websuche.
  • AUTO_ROUTING Umgebungsvariable entfernt — Auto-Endpunkt klassifiziert Abfragen immer.

Behoben

  • Duplizierte Nachrichtenübermittlung — Die Chat-Eingabe verwendet nun einen synchronen Guard, um zu verhindern, dass dieselbe Nachricht bei schnellen Klicks mehrfach eingereicht wird.
  • Structured Output Degradation Chain — Die 3-stufige Fallback-Logik (native FC → JSON mode → plain text) durchläuft nun korrekt alle Ebenen.
  • json_mode_enabled DB-Wert ignoriert — Modelle, die über Admin konfiguriert werden, verwenden nun korrekt ihre modellspezifische Einstellung statt immer auf die Umgebungsvariable zurückzugreifen.
  • DAG-Planungsfehler-Nachricht — Zeigt nun benutzerfreundliche zweisprachige Nachricht statt rohem Pipeline-Fehler.
  • MCP Server Owner Bypass für allow_fallback — Der Server Owner wird nicht länger durch allow_fallback=False blockiert.

[v0.8] - 2026-03-20

Hinzugefügt

  • Marketplace-Redesign Phase 1 — Solutions + Components — Zwei-Ebenen-Marktmodell (Solutions: Agent/Skill/Workflow; Components: Connector/MCP Server) mit Scope-Selector (Global Market / org). KB aus Market-Scope entfernt. Einheitliches Abonnementmodell.
  • Smart file content injection + read_uploaded_file tool — Kleine Uploads (unter 32K Zeichen) werden automatisch in den LLM-Kontext eingefügt; große Dateien erhalten Metadaten + Tool-Hinweis. Dual-Mode-Lese-Tool mit Pagination und Regex-Suche. GET /api/files/{file_id}/content Endpunkt.
  • Workflow Blueprint System — Visueller Workflow-Editor für mehrstufige Automatisierung: 25 Node-Typen (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, Variable Interpolation, Condition/Classifier-Verzweigung, Fehlerstrategien pro Node, Pro-Node-Timeout, Import/Export/Duplizieren, Versionshistorie mit Diff-Viewer, 14 vordefinierte Templates, 306 Tests.
  • Workflow Triggers — Cron-Planung mit Zeitzonenunterstützung; öffentliche API-Schlüssel (wf_ Präfix) für externe Ausführung ohne Benutzerauthentifizierung; Batch-Ausführung (bis zu 100 Input-Sets, konfigurierbare Parallelität).
  • Workflow Operations — Echtzeit-Ausführungsprotokoll-Viewer, Trace-Viewer mit Variable Snapshots, Run-Replay-Overlay auf Canvas, Run-History-Export, Analytics-Dashboard mit täglichen Trends und Perzentilen, Pro-Node-Statistik-Panel, Favoriten/Pinning, Inline-Validierungs-Badges, Canvas-Node-Suche (Cmd+F), Tastenkombinationen, Snap-to-Grid.
  • Workflow Admin + Templates — Admin-Verwaltungs-Tab für alle Workflows, WorkflowTemplate Modell mit Admin CRUD und 5 Seed-Templates, Publish-Flow mit Org-Level-Review-Gating, Import-Konflikt-Resolver für externe Referenzen.
  • Agent Skill System — On-Demand-Skill-Laden: Skill Modell mit CRUD/Publish/Review, read_skill(name) Tool für progressive Offenlegung (~80% Token-Reduktion), compact_instructions pro Agent für benutzerdefinierte ContextGuard-Komprimierung. Vollständige Skills-UI mit Listenseite, Editor und Agent-Skill-Selector.
  • ConnectorMetaTool (Progressive Disclosure Phase 1-2) — Single Meta-Tool ersetzt Pro-Action-Tools. System Prompt erhält leichte Stubs (~30 Token/Connector); Agent ruft discover/execute bei Bedarf auf. Feature Flag CONNECTOR_TOOL_MODE für Rückwärtskompatibilität.
  • Connector Import/Export/Fork — Connector-Templates via JSON-Export freigeben, via Fork klonen und anpassen. Backend bereinigt Anmeldedaten beim Export.
  • Connector-Anmeldedaten-Verschlüsselung + Pro-Benutzer-Overrideconnector_credentials Tabelle mit Fernet-Verschlüsselung, allow_fallback Flag, GET/PUT/DELETE /my-credentials Endpunkte.
  • Publish Review UI — Org-Level-Review-System mit Approve/Reject-Workflow, Status-Badges auf Ressourcen-Karten, Review-Hinweis im Publish-Dialog, Erneut einreichen für abgelehnte Ressourcen.
  • Semantic schema annotations — 16 vordefinierte semantische Tags für Connector-Felder mit description und pii Flags, in LLM-Tool-Beschreibungen angezeigt.
  • Agent Mid-Loop Self-Reflection — Goal-Check-Prompt wird alle 6 Iterationen in ReAct eingefügt, um Drift in langen Ketten zu verhindern.
  • Shadow Market org + resource subscriptions — Pull-basierte Ressourcen-Freigabe: Ressourcen werden über Marketplace entdeckt und explizit abonniert. Market API für Browse/Subscribe/Unsubscribe.
  • Agent Auto-Discovery + Sub-Agent Bindingdiscoverable Flag + sub_agent_ids Whitelist + CallAgentTool für einstufige Delegation.
  • MCP Server Anmeldedaten + Pro-Benutzer-Overridemcp_server_credentials Tabelle mit allow_fallback Flag für Anmeldedaten-Fallback-Verhalten.
  • Connector/KB Toggle — Suspend/Resume Endpunkte für beide Ressourcentypen.
  • Standalone KB Conversationskb_ids Feld auf Conversations für direkten KB-Chat ohne Agent-Binding.
  • Review Log Audit Tab — Admin-Audit-Seite mit System Log / Review Log Toggle und filterbarem Review Trail pro Org/Ressource.
  • Agent Directive in Synthesisagent_directive Parameter stellt sicher, dass endgültige Antworten dem Kernzweck des Agenten entsprechen.

Geändert

  • Abonnementbasiertes Sichtbarkeitsmodell — Vereinfacht von 3-stufig auf 2-stufig (eigene → abonniert). Automatische Migration bewahrt bestehenden Zugriff.
  • Tool-Cache-Whitelist — Blacklist durch explizite cacheable-Eigenschaft auf Tools ersetzt. 11 schreibgeschützte Tools als cachebar markiert.
  • DAG-Executor-Kaskadenfehler — Fehlgeschlagene Schritte blockieren abhängige Schritte kaskadierend mit transitiver Ausbreitung.
  • DAG-Planer-Verbesserungen — Tool-Beschreibungen im Planer, vollständige Neuplanungsverlauf über alle Runden, 14 Engine-Konstanten als Umgebungsvariablen parametrisiert.
  • stream_answer-Beobachtungstrunkierung — Erhöht von 2000 auf 8000 Zeichen (konfigurierbar über REACT_TOOL_OBS_TRUNCATION).
  • Evidence-Confidence-UI — Bernsteinfarbene Warnkarten, [N]-Zitationsbadges mit Hover-Popups, Konflikt-Warnbanner mit Seite-an-Seite-Vergleich.
  • Workflow-Versionswechsel-Zusammenfassungen — Automatisch generierte menschenlesbare Zusammenfassungen aus Blueprint-Diffs beim Speichern der Version.
  • Workflow-Run-Aufbewahrungsbereinigung — Hintergrund-Bereinigungsaufgabe mit konfigurierbaren Alters-/Zählgrenzen. Umgebungsvariablen: WORKFLOW_RUN_MAX_AGE_DAYS, WORKFLOW_RUN_MAX_PER_WORKFLOW.
  • Connector-Schutzschalter — Dreizustands-Zustandsmaschine (geschlossen/offen/halb-offen) mit Pro-Connector-Fehler-Tracking und Monitoring-Endpunkten.
  • elkjs durch leichtgewichtiges BFS-Auto-Layout ersetzt/workflows/[id]-Bundle von 473 kB auf 43 kB reduziert.

Behoben

  • Workflow eval namespace flattening — Kurzvariabler-Namensauflösung in ConditionBranch und VariableAssign behoben.
  • Keine Überprüfung bei is_active-Umschaltung — Das Umschalten von is_active setzt publish_status nicht mehr von approved auf pending_review zurück.
  • Cascade-skip für Bedingungszweige — Übersprungene Knoten deaktivieren ausgehende Kanten korrekt.
  • Dependency analyzerskill_ids-Auflösung behoben, Groß-/Kleinschreibung-unabhängige Knotentypabstimmung.

Entfernt

  • Entfernt is_global Feld und alle globalen Sichtbarkeitskonzepte — ersetzt durch Market org + Abonnements.
  • Entfernt globale Agent/MCP Server Admin-Endpunkte.

[v0.7.5] - 2026-03-12

Hinzugefügt

  • Freier Moduswechsel — Wechsel zwischen Auto/React/DAG während eines Gesprächs. Verfolgung des Modus pro Durchgang über metadata.mode.
  • Drei Modellrollen — Unabhängige Umgebungskonfiguration für General, Fast und Reasoning Stufen. Fast-Modell erbt keine Einstellungen des Hauptmodells mehr.
  • DAG-Engine-VerbesserungenStepOutput strukturierte Daten, Tool-Cache mit asynchronem Lock-Stampede-Prävention, LLM-Verifizierung pro Schritt mit Wiederholung (DAG_STEP_VERIFICATION), automatisches Routing über Fast-LLM-Klassifizierung (AUTO_ROUTING).
  • Verschlüsselung von Connector-Anmeldedaten — Auth-Token extrahiert in die Tabelle connector_credentials mit Fernet-Verschlüsselung über CREDENTIAL_ENCRYPTION_KEY. Endpunkte zur Außerkraftsetzung von Anmeldedaten pro Benutzer. Flag allow_fallback.
  • ModelConfig API-Schlüsselverschlüsselung im Ruhezustand — Transparente Verschlüsselung beim Schreiben / Entschlüsselung beim Lesen mit abwärtskompatibel erkanntem Klartext.

Geändert

  • Skeleton Screens — Alle Listen-/Grid-Seiten zeigen während des Ladens layoutbewusste Skelette statt Spinner an.

Behoben

  • Schnellmodell erbt keine Einstellungen mehr vom Hauptmodell.
  • SSE-Routing-Ereignisfeldnamen mit Backend abgestimmt.

[v0.7.4] - 2026-03-12

Added

  • Evaluation Center — Test dataset management, parallel eval runs with LLM grading, per-case pass/fail/latency/token results viewer with auto-polling.
  • Admin: json_mode_enabled per-model flag — Explicit toggle preventing AWS Bedrock prefill issues. ENV models controlled by LLM_JSON_MODE_ENABLED.
  • SSE Protocol v2 — Real-time streaming with delta_reasoning, usage fields, split done/suggestions/title/end events.
  • AI Builder expansion — 7 new builder tools, is_builder flag, builder prompt auto-refresh, SSRF guard. Full ReAct agent dialog for connector management.
  • Dual database support — SQLite (zero-config) + PostgreSQL (production). Docker Compose auto-provisions PG with health checks.
  • Extended thinking / reasoningLLM_REASONING_EFFORT and LLM_REASONING_BUDGET_TOKENS for OpenAI o-series, Gemini 2.5+, Claude.
  • Admin: tool disable — Per-tool enable/disable toggles; disabled tools filtered from chat at runtime.
  • Settings: Organizations tab — Create, join, manage orgs with member roles directly from Settings.
  • Docker Compose deployment — Single image, named volumes, standalone Next.js output.
  • Export: PDF format — Conversations exportable as PDF documents.
  • Multi-worker supportWORKERS=N env var; Redis interrupt broker for cross-worker relay.

Geändert

  • LLM-Schicht: LiteLLM — Direkter AsyncOpenAI-Client durch universelle Anbieterunterstützung ersetzt.
  • Strukturierte Ausgabe-Degradation — Einheitliche structured_llm_call() mit 3-stufiger Extraktion (Native FC → JSON Mode → Klartext + Regex).
  • Intelligentes Relay-Routing — Erkennt automatisch das API-Protokoll aus URL-Pfadmustern für Relay-Plattformen von Drittanbietern.

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 stürzen auf PostgreSQL ab.
  • Docker: i18n-Dateiermittlung, Startup-Race-Condition, OAuth-Autovermittlung für benutzerdefinierte Ports.
  • Export: RFC 5987-Dateiname für CJK.

[v0.7.3] - 2026-03-06

Hinzugefügt

  • Globale MCP-Server — Von Administratoren bereitgestellt, in allen Chat-Sitzungen geladen.
  • Strukturiertes Audit-Loggingwrite_audit()-Hilfsfunktion mit strukturierten Spalten.

Behoben

  • Rückwärtskompatibilität für Einladungscode für das Legacy-Feld registration_enabled.

[v0.7.2] - 2026-03-06

Hinzugefügt

  • Nur auf Einladung basierte Registrierung — Drei Modi (offen/Einladung/deaktiviert) mit Einladungscode CRUD.
  • Speicherverwaltung — Speichernutzung pro Benutzer, Löschen, Bereinigung verwaister Dateien.
  • Erzwungenes Logout pro Benutzer — Admin-Token-Widerruf.
  • Gesprächsmoderation — Admin-Liste/Löschen aller Gespräche.

[v0.7.1] - 2026-03-06

Hinzugefügt

  • API-Gesundheitsdashboard — Systemstatistiken, Connector-Metriken, Token-Nutzungsdiagramme.
  • JWT-Authentifizierung — Token-basierte SSE-Authentifizierung, Gesprächseigentümerschaft.
  • Admin-API — Agent-Verwaltung, Token-Kontingent pro Benutzer (429-Durchsetzung).

[v0.7] - 2026-03-06

Hinzugefügt

  • Admin Platform — Benutzerverwaltung, Rollenwechsel, Passwort zurücksetzen, Konto aktivieren/deaktivieren.
  • First-run setup wizard — Geführte Erstellung des Admin-Kontos.
  • Personal Center — Globale Anweisungen pro Benutzer, Spracheinstellung.

[v0.6.5] - 2026-03-05

Hinzugefügt

  • Utility-Toolsemail_send, json_transform, template_render, text_utils.
  • Connector-AntwortfilterungCONNECTOR_RESPONSE_MAX_CHARS und CONNECTOR_RESPONSE_MAX_ITEMS.
  • Embedding-Modelloptionen — Jina, OpenAI und benutzerdefinierte Anbieter.

[v0.6] - 2026-03-01

Added

  • Connector Platform — Full CRUD, ConnectorToolAdapter, per-user credential encryption, confirmation gate, circuit breaker, audit logging.
  • MCP integration — Tool auto-discovery via protocol, process isolation.

[v0.5] - 2026-02-28

Hinzugefügt

  • Vollständige RAG-Pipeline — Jina Embedding + LanceDB + FTS + RRF + Reranker.
  • Grounded Generation — Evidenzgestützte Zitate, Konflikt-Erkennung, Konfidenzscores.
  • KB-Dokumentenverwaltung — Chunk-Level CRUD, Suche, Wiederholung, Schema-Migration.
  • ContextGuard + Pinned Messages — Token-Budget-Manager.
  • DAG Re-Planning — Bis zu 3 Runden; LLM Compact für Speicher.

[v0.4] - 2026-02-25

Hinzugefügt

  • Multi-Turn-Konversationen — DbMemory-Persistenz, intelligente Kürzung.
  • Tool-Schritt-Faltungs-UI — Werkzeugaufrufe ein-/ausklappen.
  • HTTP-Request- und Shell-Exec-Tools.
  • Agentenverwaltung — Erstellen, konfigurieren, veröffentlichen mit gebundenen Modellen/Tools.
  • JWT-Authentifizierung.

[v0.3] - 2026-02-25

Hinzugefügt

  • Web-Toolsweb_search (Jina/Tavily/Brave), web_fetch.
  • Dateivorgänge + MCP-Client.
  • DAG-Visualisierung — Interaktiver Flussdiagramm mit Live-Status.
  • Code-Ausführung in Docker--network=none, Speicherlimits, Timeout.

[v0.2] - 2026-02-24

Hinzugefügt

  • Wiederholung & Ratenbegrenzung — Exponentielles Backoff.
  • Nutzungsverfolgung — Token-/Kostenabrechnung pro Anfrage.
  • Native Funktionsaufrufe — Direkte Modellwerkzeugauswahl.
  • Multi-Modell-UnterstützungFAST_LLM_MODEL fü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 loop.
  • DAGPlanner — LLM-generated dependency graphs, concurrent execution, result verification.
  • Tools — Calculator, Python exec.
  • Portal UI — Next.js with streaming, dark/light theme, KaTeX.