TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha12
  4. #29953

8.0.0-alpha12
TopLogic Release

2026-10-30

enhancement

major
#29658
TL Views: Schwebende Hauptaktion (Floating Action Button) und Aktionsfächer (Speed Dial)
#29704
tl-archetype-app: Neue Anwendung standardmäßig mit React-Oberfläche erzeugen, klassische Oberfläche per Option
#29729
TL Views: Ein Flussdiagramm (flow-diagram) lässt sich nicht für Mehrfachauswahl konfigurieren
#29781
TL Views: Aktionsketten mit benannten Argumenten – Auslöser liefern mehrere Werte, Skripte verwenden sie als implizite Variablen, Aktionen mit Ergebnis führen Folgeaktionen in <with-result> aus
#29856
React UI: consolidate the access check definitions of views, commands and TL-Script functions
#29860
Konfigurationsformulare: Eingabefelder werden über fachliche Annotationen (@MultiLine, @Code, @Html, @Inline, …) gewählt, in klassischer und React-Oberfläche gleich; @ControlProvider und @ConfigControl entfallen
#29865
Configuration layering: removing a list entry whose key the underlying layers do not (or no longer) define fails the application start
#29875
Design System wave 5a: color input, icon select and slider read the design system package
#29877
Developer docs: an article on the persistency configuration of an application (single branch vs. multiple branches, type systems, what changes the schema)
#29880
XIO: Import of an evolving external format: report unknown elements, reject a second composite container with a location, match several values in one <switch> case
#29887
TL Views: Einfügevorschläge für ein Textfeld - per TL-Script berechnete Vorschläge an der Schreibmarke
#29888
view-layer forms: normalize an entered value before it is stored
#29892
view-layer forms: actions that enter and leave edit mode (<enter-edit-mode/>, <leave-edit-mode/>)
#29893
Model upgrade log does not mention a reference whose target type changed
#29896
Typed configuration: config:ref addresses an entry of a keyed list by a globally unique key without naming the path to it; a view overlay addresses every element by its id
#29904
Design System wave 5b: media controls read the design system package
#29905
Switch tl-engine to Java 21
#29906
Design System wave 5c: calendar, kanban, dashboard and value list read the design system package
#29914
Design System wave 5d: foundation pieces and foreign stylesheets read the design system package; tlReactControls.css is removed
#29917
Rollenprofil-Import: implizite Leserechte der umgebenden Sicherheits-Layouts ergänzen
#29941
TL Views: Auswahlfeld, das zusätzlich einen frei eingegebenen Wert annimmt ("auswählen oder neu eingeben")
#29942
TL Views: Erwähnungen im HTML-Editor - Verweise auf Objekte (z.B. Projektmitglieder, Tickets) per @/# einfügen, die zu Links werden
#29944
Konfigurierbare Start-Haken, die nach dem Start aller Services ausgeführt werden
#29947
Steueranwendung: Workspace-Management – leere TopLogic-Anwendung in einem Docker-Container anlegen, starten, stoppen und aufräumen
#29948
Credentials für externe Dienste ohne Geheimnisse in der Konfiguration: Secret-Quellen, Token-basierte Authentifizierung (Keycloak/OIDC, Workload Identity, Azure) und API-Gateway
#29953
Steueranwendung: Agenten-Harness im Workspace – Auftrag an Claude Code, Live-Transkript, Übernahme durch einen Menschen, LLM-Zugang über einen Proxy
#29954
KI: Modellkatalog aus der Dienstkonfiguration des LLM-Anbieter-Dienstes herausnehmen und in einer eigenen Ansicht zeigen
#29955
React-UI: Dienstkonfiguration anzeigen, bearbeiten und speichern (mit Kennzeichnung "Neustart erforderlich")
#29956
Anwendungen und Fragment-Module ohne TopLogic-Parent-POM bauen: BOM, Maven-Packaging tl-app/tl-fragment und Feature-Starter
#29957
React-Oberfläche: Browser-Tab-Titel folgt der angezeigten Ansicht
#29963
Development-Menü im React-UI nur für angemeldete Benutzer anzeigen
#29965
tl-ai-core: LLM-Anbieter ohne Anwendungskonfiguration über Umgebungsvariablen aktivieren
#29968
Filterleiste: Presets mit Zähler und eigener CSS-Klasse
#29973
XML import: <set-translation> stores an empty text and needs a bound language
#29974
XML import: <unless-known> cannot import the attributes of a known element without its structure
#29975
XML import: <resolve-existing> loads only the partition of existing objects an ID belongs to; linking checks membership without reading the whole reference
#29976
View layer: <tree-table> offers no <export> (Excel export) although the export writes trees as outlines
#29977
View layer: <tree-table> has no node display (icon, label, CSS class per cell) and no row-class
#29981
View layer: a table column cannot be declared unsortable, so the groups it forms cannot keep the order of their rows
#29989
Javadoc-Verweise und ungenutzte Imports im Maven-Build prüfen, Eclipse meldet fehlerhaftes Javadoc nur noch als Warnung
#30012
Translator: erkannte Ausgangssprache bei automatischer Spracherkennung zurückgeben
#30017
Build: Git-Merge-Treiber für die generierten Ressourcendateien, damit parallele Pull-Requests nicht bei jedem neuen Schlüssel in Konflikt geraten
#30051
Initiale Gruppen "user" und "superuser" in der Basis anlegen
minor
#29852
TL Views: Mehrwertige Binärwerte als Datei-Chips (oder Werteliste) mit Mehrfach-Upload, Pflichtfeld, Validierung und accept-Filter; <file-list> entfällt
#29872
TL Views: the min/max/step of a number input (slider) are fixed in the configuration and cannot come from a channel or expression
#29873
TL Views: a time input (ReactDatePickerControl.Kind.TIME) cannot enter or show seconds
#29874
TL Views: a select input always sorts its options by label - no way to keep the order of the option list
#29898
Development start (tl-ide-jetty) provides no Jakarta WebSocket container
#29952
React-View-Schicht: Fenster folgen Commits anderer Threads ohne eigene Konfiguration – ersetzt CommitSource und den Refresh-Teil von AgentViewRefreshService

defect

critical
#29926
Derived attributes computed by a <query> storage evaluate to null for a user without Discover right on the object (regression of #29782 in 8.0.0-alpha11)
#29994
Build: master verletzt den JavaDoc- und Import-Check von #29989 (tl-chat, tl-ai-core, tl-factory)
major
#29742
Konfigurierte Defaults (<defaults>) wirken nicht innerhalb der Anwendungskonfiguration
#29798
Derived reference reads as empty in the commit check (no user): result filter of AttributeByExpression stays on
#29869
A React view window that lost its SSE connection keeps every later KB revision in memory until its session ends
#29876
KnowledgeBase on H2: deleting objects scans the association tables (the reference indexes start with BRANCH, and H2 seeks an IN list only on the first index column)
#29886
view-layer <confirm>: line breaks of the message are collapsed
#29889
Adding one element to a set reference reads the whole set (quadratic set building)
#29895
deploy/local applies only to the module in the working directory: a module of a multi-module build cannot be started from the reactor root
#29908
React-Tabelle zeigt nach dem Neuladen der Seite in den oberen Zeilen keinen Inhalt
#29916
Rollenprofile: Leserecht eines Dialogs wird auf die öffnende Komponente übertragen
#29918
Design System: a panel's toolbar sticks to the title instead of standing at the end of the title bar
#29920
TL Views: Die Zeilenauswahl in einer React-Tabelle braucht bis zu einer Sekunde, weil jede Auswahl alle Zellen neu überträgt und bei einer Tabelle mit Eingabekanal alle Zellen neu erzeugt
#29922
Composition-Tabelle in einem Formular bekommt keine Höhe, ein Dialog kann nicht mehr bis zur Tabelle scrollen
#29923
React-Oberfläche: Inhalt eines Navigationseintrags mit route="none" erzeugt URLs, die sich nicht öffnen lassen
#29925
TestGenerateJavaIntegration fails with the split local Maven repository of the CI builds
#29931
invert-link-table makes both ends of a link the destination on MySQL
#29932
Gruppen und Adressen sind für Superuser nicht lesbar: tl.accounts:Group und tl.accounts:Address haben keine Rollenquelle
#29933
React-UI: Der Griff eines Split-Panels "läuft weg" beim Ziehen mit der Maus; tiefe Baumknoten brechen um statt waagerecht zu rollen
#29934
View-Designer: Zur Laufzeit geöffnete Sichten (Rahmen eines tile-stack, navigate-push, open-dialog) fehlen im Entwurfsbaum und lassen sich nicht per "Sicht auswählen" anwählen
#29964
React UI: password login sometimes logs out immediately - a command of the replaced window triggers the stale-UI reload of the old window URL
#29967
React-UI: Spaltenauswahl der Tabelle bietet das Gruppieren nach einer Spalte nicht mehr an
#29970
React-Bridge: Ein Sprung, der seine Zielseite erst erzeugt, malt sie ohne die gesetzte Auswahl
#29971
React-Views: Die Ausführbarkeit eines Befehls übersieht einen Commit eines fremden Threads während des Seitenaufbaus
#29978
View layer: <tree-table> does not reveal a selected object under a collapsed node and misses changes while hidden
#29979
Migration: migrations of an application module without a stored version never run, the auto model upgrade runs instead
#29980
Migration: update-class with a new-name in another module does not move the class's associations
#29983
View layer: a tab strip wider than its container neither scrolls nor wraps nor collapses into a menu
#29990
React-UI: Panels und bedingte Inhalte nehmen in Split-Flächen, Tabs und Stacks die falsche Höhe
#29991
View layer: split-panel ignores unit="px" of a pane and treats its size as a weight
#29992
React-Modelleditor: Annotation "Eingabekontrolle" bietet keine Umsetzung zur Auswahl an
#29999
React-UI: Tabelle zeigt nicht mehr an, welche Spalten gefiltert sind
#30001
Entwicklungsmodus: neu geschriebene WEB-INF-Dateien sind über den FileManager erst verzögert sichtbar (Theme-Import zeigt keine Variablen, ThemeEditor_Ticket-24158_Import-export scheitert sporadisch)
#30002
Service-Editor: Konfiguration aller Services fehlerfrei anzeigen
#30005
React-Oberfläche: Ein Einstiegspunkt verliert beim Laden seine View-Datei aus der URL, F5 zeigt die Default-View (Regression #29957)
#30013
TL Views: Auswahlfelder bieten später angelegte Objekte ihres Typs erst nach neuer Anmeldung an
#30014
React-Formulare: Sichtbarkeit beim Anlegen (create-visibility) eines Attributs wird nicht berücksichtigt
#30015
React-Oberfläche: Anlegen in einem Container wird nicht geprüft, solange der Container-Kanal leer ist
#30016
Aufzählungswerte (Klassifikatoren) sind für Benutzer ohne Administratorrechte nicht entdeckbar: Ein Aufzählungs-Attribut kann nicht gesetzt werden
#30019
TABLE.debounce() verwendet globalen Singleton-Timer — Slice-Nachladen schlägt bei mehreren Tabellen fehl
#30024
React-Oberfläche: NullPointerException in ModelAccessPolicy.isGrantable, wenn ein Zugriffs-Parent seine Parent-Typen nicht statisch kennt
#30026
Instabiler Test: TestQueueReporter#testGetReport schlägt fehl, wenn zwei Builds auf demselben Knoten gleichzeitig laufen oder der Rechner ausgelastet ist
#30030
Mail-Server-Daemon: neue Mails anhand der IMAP-UID statt des Gelesen-Flags erkennen, unbekannte Mails standardmäßig im Postfach belassen
#30055
TL Views: a table with active-preset and search-term channels renders every filtered row instead of a window; 15k rows load 88 MB and crash the browser tab
minor
#29515
Inkonsistente Drop-Typ Konfiguration für Drop-Operationen möglich
#29868
KBChangeAnalzyer logs "There is a part id ... but no item for update" for every update of a part of a monomorphic inline-set storage
#29883
A boolean attribute without a value reads as false on a persistent object, as null on a transient one
#29894
Commit einer geänderten Annotation loggt ERROR mit Stacktrace, wenn der alte Wert eines abgeleiteten Attributs (z.B. options) nicht mehr instanziierbar ist
#29935
Popup-Fenster (Skript-Rekorder, Dokumentation) lässt sich nach dem Schließen nicht sofort wieder öffnen (Edge/Chromium): Fehler "Cannot read properties of null (reading 'services')"
#29959
Persönliche Einstellungen werden nicht gespeichert, wenn der Benutzer eine verletzte Modell-Bedingung hat (z. B. root ohne Kontaktdaten)
#29960
React-Oberfläche: Browser-Tab zeigt immer "TopLogic View" statt des Anwendungsnamens
#29969
SecurityConfiguration: Crash durch DeletedObjectAccess
#29972
composition-table im Bearbeitungsmodus: die Lösch-Spalte bekommt den freien Platz statt der letzten Datenspalte
#30056
TL Views: NullPointerException in ReactControl.commitUpdate from the session-timeout notice countdown ("Failed to announce the activity of session")

task

major
#29767
Clean up loose design documents (docs/, specs/, module doc folders): valid content into the developer documentation, open work into tickets
#29924
Integrate the tl-ai repository into tl-engine: its modules become engine modules
#30037
Name the base type of polymorphic configuration properties as wildcard bound (PolymorphicConfiguration<? extends X>) and check the rule in the build
minor
#29921
Renovate hinterlässt in npm-Lock-Dateien verwaiste Einträge, die der nächste Maven-Build wieder entfernt

update

critical
#29949
Update dependency dompurify to ^3.4.17 [SECURITY]
#29950
Update dependency vite to ^6.4.4 [SECURITY]
#29984
Update dependency serialize-javascript to ^7.1.3 [SECURITY]
#30008
Update dependency com.google.guava:guava to v33 [SECURITY]
enhancement (User-visible)

major

#29953

Steueranwendung: Agenten-Harness im Workspace – Auftrag an Claude Code, Live-Transkript, Übernahme durch einen Menschen, LLM-Zugang über einen Proxy

ReactUI

Kontext

Zweiter Schritt der Steueranwendung aus #29946. Er baut auf dem Workspace-Management aus #29947 auf. Bisher legt die Steueranwendung eine leere TopLogic-Anwendung in einem Docker-Container an, startet, stoppt und entfernt ihn. Mit diesem Schritt arbeitet ein KI-Agent (Claude Code) im Workspace-Container an der Anwendung. Der Anwender erteilt ihm in der Steueranwendung einen Auftrag und verfolgt seine Arbeit live im Chat. Er kann jederzeit selbst in die Unterhaltung eingreifen.

Der LLM-Proxy war in #29946 zusammen mit dem Git- und CI/CD-Proxy für den dritten Schritt vorgesehen. Er ist hierher vorgezogen, weil kein API-Key in einen Workspace-Container gelangen darf und der Agent ohne Proxy also nicht laufen kann.

Verhalten

Auftrag und Unterhaltung

  • In der Detailansicht eines Projekts gibt es „Auftrag erteilen“. Der Befehl ist aktiv, wenn der Workspace läuft und sein Image die Agenten-Werkzeuge enthält; sonst nennt er den Grund. Der Auftrag legt eine neue Unterhaltung mit dem Agenten an und sendet ihn als erste Nachricht.
  • Der Reiter „Agent“ zeigt die Unterhaltungen des Workspaces (neueste zuerst) und die gewählte Unterhaltung im Chat (tl-chat): Antworten mit Markdown, Tool-Aufrufe mit Ergebnissen, Dauer und Kosten jedes Laufs, Kontextauslastung. Die Anzeige aktualisiert sich ohne Neuladen, auch in mehreren Fenstern, und der Verlauf bleibt erhalten.
  • „Stopp“ bricht einen laufenden Lauf ab; danach kann der Anwender weiterschreiben.

Übernahme

  • Der Anwender schreibt über das Eingabefeld des Chats in dieselbe Unterhaltung. Der Agent setzt mit dem Kontext der bisherigen Unterhaltung fort, auch nachdem sein Prozess beendet war.
  • Während der Agent arbeitet, ist das Senden wie bei den eigenen Agenten gesperrt.

Anwendungs-Log

  • Der Reiter „Anwendungs-Log“ zeigt die eigene Ausgabe der Anwendung im Container live (die letzten Zeilen).

Workspace aktualisieren

  • Ein Workspace, dessen Container mit einem älteren Workspace-Image angelegt wurde, zeigt „Image veraltet“ und bietet „Workspace aktualisieren“ an. Die Steueranwendung legt den Container mit dem aktuellen Image neu an. Quellen, Maven-Repository und Datenbank in den Volumes bleiben erhalten, ebenso das Initialpasswort; eine laufende Anwendung wird neu gestartet.
  • Workspaces, die noch mit dem früheren, als root laufenden Image angelegt wurden, lassen sich so nicht übernehmen (ihre Quellen gehören root); sie werden aufgeräumt und neu angelegt.

LLM-Zugang

  • Der Agent erreicht das Sprachmodell ausschließlich über einen Proxy der Steueranwendung. Der Container kennt nur dessen Basis-URL; kein API-Key und kein dauerhaftes Token liegt im Container.

Technische Umsetzung

  • Workspace-Provider: Kommandos im Container laufen als Prozess mit Handle (startExec, ExecProcess): Eingabe auf stdin, gestreamte Ausgabe, Abbruch (TERM, nach Frist KILL an die Prozessgruppe) und Timeout; das blockierende exec baut darauf auf. Damit ist der offene Punkt „kein Timeout“ aus #29947 erledigt. followLog liefert das Container-Log fortlaufend, recreate legt den Container neu an und behält die Volumes, networkSubnets nennt die Subnetze des Workspace-Netzes. extra-hosts (z. B. host.docker.internal:host-gateway) macht die Steueranwendung aus dem Container erreichbar, wenn sie direkt auf dem Docker-Host läuft. Standard-Input läuft über eine eigene Verbindung zum Daemon (HijackedConnection), weil die Docker-Bibliothek die Verbindung nicht halb schließen kann.
  • Workspace-Image: Anwendung und Agent laufen als Benutzer tl ohne root-Rechte; damit ist der offene Punkt „Container laufen als root“ aus #29947 erledigt. Das Image enthält Claude Code, Node, den Playwright-MCP-Server mit Headless-Chromium und das Plugin tl-claude-tools (Skills, tl-mcp), alle in fester Version. Der Workspace merkt sich das Image, mit dem sein Container angelegt wurde.
  • Feste Versionen und Renovate: Der Tag des Images ist ein Hash seines Build-Kontexts und ändert sich mit jeder Version. Nicht festgelegte Versionen würden einmal gebaut und danach nie mehr aktualisiert, und das Ausgabeformat von Claude Code wird geparst, eine neue Version soll also erst nach einem Test in Gebrauch kommen. Renovate-Annotationen im Dockerfile und ein Regex-Manager in renovate.json legen für neue Versionen einen gemeinsamen PR „workspace image tools“ an (Node nur LTS ab 22). Vor dem Merge wird er lokal mit -Dtl.factory.integration=true geprüft; in die bestehenden Workspaces kommt die neue Version mit „Workspace aktualisieren“.
  • LLM-Proxy (LLMProxyService, LLMProxyServlet unter /llm-proxy/* in tl-factory): reicht nur POST /v1/messages und /v1/messages/count_tokens durch, auch als SSE-Stream, entfernt Authorization, Cookies und Hop-by-Hop-Header und setzt den API-Key eines per Name konfigurierten Anthropic-Providers des LLMProviderService (tl-ai-core).
    • Tokens gelten pro Agenten-Prozess: issue(workspace, lifetime) gibt ein zufälliges Token mit 256 Bit aus (SecretTokens in tl-ai-core, auch von AccessTokens genutzt), revoke widerruft es. Es liegt nur als Hash im Speicher der Steueranwendung, hat eine maximale Lebensdauer (Standard 4 h) und steht nur in der Umgebung des Agenten-Prozesses, nicht in der des Containers. Prozessende, Aufräumen des Workspaces und ein Neustart der Steueranwendung machen es ungültig.
    • allowed-sources (tl_factory_llm_allowed_sources) beschränkt die Absender auf CIDR-Bereiche (IPv4 und IPv6; CIDRFilter in com.top_logic.basic kann dazu jetzt IPv6) oder das Workspace-Netz (workspace-network). Geprüft wird nur die TCP-Absenderadresse, nie X-Forwarded-For. Welche Einstellung zu welcher Betriebsart passt, steht im Entwicklerartikel.
  • Externe Agenten im Chat (tl-chat, tl-ai-core): Bisher erzeugte ausschließlich der Agent-Loop von tl-ai-core die Antworten einer Chat-Unterhaltung.
    • Die Schnittstelle ConversationBackend (agentName, features, contextWindow, send) lässt einen externen Prozess eine Unterhaltung beantworten. ConversationBackendService wählt das Backend pro Sitzung über konfigurierte ConversationBackendResolver anhand des Subjekts der Sitzung; ohne Treffer läuft wie bisher der eigene Agent.
    • ChatProcessor führt beide Wege im selben Rahmen aus (Sendesperre, Persistieren, Auslieferung an die Fenster, Stopp, Abschluss). BackendRun zeichnet den Lauf auf und erzwingt den Vertrag des Backends: Ereignisse auf dem Chat-Thread während send, Abschluss mit RunCompleted; sonst endet der Lauf im Fehlerzustand.
    • Die Aufzeichnung eines Laufs (AgentExecution, Transkript, Tokens, Kosten) ist aus AgentRunner als öffentliches RunRecording herausgelöst und wird von beiden Wegen genutzt.
    • BackendFeatures bestimmen, was der Chat für eine Sitzung anbietet: Antwort neu erzeugen, Bearbeiten, Agent-, Modell-, Effort- und MCP-Auswahl, Anhänge, Freigaben. Der Server lehnt nicht Unterstütztes ab und überspringt für Backend-Sitzungen die Agenten-Policy; der Client blendet die entsprechenden Bedienelemente aus.
    • Das Subjekt einer Sitzung wird jetzt beim Anlegen der Sitzung auf dem Server gesetzt, nicht mehr nachträglich vom Browser gemeldet; so erreicht schon die erste Nachricht das richtige Backend. chatStart (TL-Script) startet eine Unterhaltung mit Subjekt und erster Nachricht über den Chat des Fensters.
    • Der Chat zeigt die Kosten jedes Laufs (live und aus dem Verlauf) und die Kontextauslastung mit dem Kontextfenster, das ein Backend meldet; ohne Angabe entfällt die Anzeige.
    • Das Stylesheet von tl-chat verwendet die Klassennamen, die die View-Schicht heute erzeugt (tl-panel, tl-titlebar, tl-stack); eine unbetitelte Leiste über einer Unterhaltung entfällt.
  • Claude Code als Backend (com.top_logic.factory.agent): Eine Unterhaltung ist ein tl.factory:AgentConversation des Workspaces (Auftrag, Claude-Session-ID) und Subjekt der Chat-Sitzung; AgentConversationResolver ordnet ihr WorkspaceAgent zu.
    • Pro Unterhaltung ein langlebiger Prozess claude -p mit stream-json für Ein- und Ausgabe als Benutzer tl im Anwendungsverzeichnis, mit eigenem Proxy-Token, beendet nach einer Leerlaufzeit (Standard 15 min); der nächste Prozess setzt mit --resume fort. Stopp sendet den Interrupt von Claude Code, notfalls wird der Prozess beendet.
    • AgentHarness / AgentProtocol trennen die Prozessverwaltung vom Claude-spezifischen Protokoll (ClaudeCodeHarness, ClaudeCodeProtocol), sodass weitere Agenten folgen können.
    • Die Ereignisse von Claude Code werden auf AgentEvent`s abgebildet (Text, Tool-Aufrufe und -Ergebnisse, Usage je Anfrage, Kosten und Kontextfenster aus `model_usage_since_last_result, Wiederholungen, Compaction, Fehler). Ein Prozessende während eines Laufs endet im Fehlerzustand.
  • Anwendungs-Log: WorkspaceLogSource ist eine ChannelSource der View-Schicht, die followLog mit begrenzter Zeilenzahl in einen Kanal veröffentlicht.
  • Betrieb auf einem gemeinsamen Docker-Server: Der Entwicklerartikel factory/docker-server.md beschreibt die genutzte Docker-API, warum die Steueranwendung nie den System-Socket bekommt und ein Socket-Proxy sie auf einem gemeinsamen Server nicht von anderen Anwendungen trennt, und die empfohlene Einrichtung mit einem eigenen rootless Docker-Daemon.

Abgrenzung

  • Git- und CI/CD-Anbindung samt deren Proxy, Ticket-Modell und Lead-Agent sowie Webhooks folgen in den weiteren Schritten von #29946.
  • Eine Chat-Sitzung gehört ihrem Benutzer; ein anderer Benutzer setzt eine Unterhaltung in einer eigenen Sitzung fort. Eine Freigaberegel für gemeinsame Sitzungen folgt später.
  • Eigene Rückfragen von Claude Code nach Erlaubnissen erscheinen nicht als Freigabe-Karten; der Agent arbeitet im Container ohne Rückfragen.
  • Ausgehende Verbindungen der Container ins Internet werden nicht eingeschränkt; Budgets pro Workspace folgen in Version 2.
  • Der Integrationstest des Workspace-Images läuft nicht in der CI.

Verifikation

  • Provider: Prozess-Handle (stdin, Abbruch, Timeout), Container-Log, Extra-Hosts, Neuanlegen mit erhaltenen Volumes und Subnetze gegen den Docker-Daemon (TestDockerWorkspaceProvider).
  • Image und Aktualisieren: Integrationstest des gesamten Ablaufs mit -Dtl.factory.integration=true (Benutzer tl, Claude Code, Plugin, Playwright-MCP mit Chromium, keine Key-Variablen; Aktualisieren erhält Passwort und Quellen).
  • Proxy: Tests gegen einen Fake-Upstream (Key gesetzt, Token nicht weitergereicht, SSE inkrementell, 401/403/404/502/503, Key in keiner Antwort und keinem Log) und gegen die Datenbank (Ausgabe, Widerruf, Ablauf, gelöschter Workspace).
  • Chat: RunRecording mit synthetischen Ereignisströmen; Backend-Schnittstelle und Freischaltung mit einem Fake-Backend; die vollständigen Suiten von tl-chat (Java und Vitest) und tl-ai-core sind grün.
  • Claude-Code-Backend: Tests mit aufgezeichneten stream-json-Strömen der festgelegten Version; Integrationstest gegen Claude Code und den Proxy.
  • UI-Prüfung in tl-factory-app mit echtem Key: Projekt anlegen, Auftrag erteilen (Datei angelegt), Nachfrage mit Kontext, Stopp, Anwendungs-Log, Wechsel zwischen Unterhaltungen, Neuladen, Kosten und Kontextanzeige, Workspace aktualisieren (Dialog).
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • DE
  • Login