Sessions: Schreibtisch mit mehreren Chats, Workspace je Session und Verbindungen (für rust-iris-nx) #151
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/iris-linux-server#151
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Warum
iris/rust-iris-nx#1baut einen neuen Client, dessen Ordnungsprinzip die Session ist: ein Schreibtisch mit mehreren Chats, einem gemeinsamen Workspace, einer Hauptnotiz und je Panelart genau einer „verbundenen“ Instanz. Das ist ein Server-Konzept (Entscheidung 2–3 im Hauptissue) und muss im Linux-Server entstehen, bevor ein Client daran arbeiten kann. Der Mac-Server bekommt es bewusst nicht (Entscheidung 5): Er meldet die Fähigkeitsessionsnicht.Die Beschreibung des Protokolls steht als Entwurf in
Entwicklerdokumentation/20-Sessions-Entwurf.md(Repoalf/2ndbrain); die sechs offenen Punkte sind entschieden, die Gesamtabnahme steht aus. Reihenfolge: erst wird der Entwurf abgenommen, dann entsteht Code. Bis dahin ist dieses Issue nur der Platz für Rückfragen und den späteren Stand.Umfang (Etappe 1 des Hauptissues)
confirm_workspace, sonst409 workspace_not_empty), Chats hinzufügen und verschieben (Dateien bleiben im alten Workspace).workspaces.workspace_path_for); Chats einer Session teilen Pfad und Notiz.connections: je Panelart genau eine verbundene Instanz; für die Artnotespiegelt der Server den Pfad invault_note_pathaller Chats der Session.POST /agent/{id}/followupfür einen zweiten Chat derselben Session →409mitbusy_job.vote: up) in einer Session mit mehr als einem Chat →409.GET /healthmeldet die Fähigkeitsessions_apiund den Zählersessions_version(steigt bei Änderungen an Sessions, Chats in Sessions und Verbindungen, nicht bei Layouts).DELETE /agent/{id}löscht bei einer impliziten Session wie heute alles; bei einer expliziten bleibt die (dann leere) Session mit ihrem Workspace bestehen..irischat) bei Mehr-Chat-Sessions standardmäßig ohne gemeinsamen Workspace (with_workspaceist dortfalse).Nicht Teil
Mac-Server, Gateway-Allowlist (
iris/iris-plugins#346), Teilen und Verlauf für Mehr-Chat-Sessions, Server-Ereignisse für Session-Änderungen (zunächst Abfrage), Chat-Bereiche an Sessions.Verwandt
iris/rust-iris-nx#1,iris/iris-plugins#346,alf/2ndbrain(Entwurf20-Sessions-Entwurf.md).Stand 2026-11-11: sechs offene Punkte des Protokollentwurfs entschieden. Entwurf:
Entwicklerdokumentation/20-Sessions-Entwurf.md(PRalf/2ndbrain#184).confirm_workspacegelöscht (409 workspace_not_empty).with_workspace: false), mittrueausdrücklich.sessions_versioninGET /health; Layout-Schreibzugriffe zählen nicht.Geprüft: Der Entwurf stützt sich auf den Code des Linux-Servers (
workspaces.py,GET /health,followup,archive, Jobfelder, Pfad-Umschreiben injobs_store.py), gelesen, nicht gebaut. Nicht geprüft: alles, was Verhalten betrifft (nichts gebaut). Offen: Gesamtabnahme des Entwurfs; die Ausnahme im zentralen Vertrag (Sessions nur im Linux-Server) ist noch nicht eingetragen.PR #152 gemergt: feat(sessions): Schreibtisch mit mehreren Chats, Layouts und Verbindungen (#151)
http://docker:3000/iris/iris-linux-server/pulls/152
Commits:
Stand: Sessions im Linux-Server gebaut, auf dem Dev-Host deployt und getestet
Befund: Der Entwurf
Entwicklerdokumentation/20-Sessions-Entwurf.md(abgenommen, Gegenstückiris/rust-iris-nx#1) ist im Linux-Server umgesetzt.Geändert:
app/sessions.py(neu): Speicher/data/sessions.json(atomar geschrieben, beschädigte Datei wird gesichert statt verworfen), Ansicht, alle Regeln und Fehler. Implizite Sessions ohne Migration (ID = Job-ID), explizite mit eigenem Workspace/workspaces/<id>.app/sessions_routes.py(neu):GET/POST /sessions,GET/PATCH/DELETE /sessions/{id},POST /agent/{id}/session, Layouts (GET/PUT/DELETE …/layouts/{client_key}, bis 1 MB, 8 je Session,base_version), Verbindungen (PUT/DELETE …/connections/{kind}, eine je Art,notewird in alle Chats gespiegelt und geprüft). Fehler mitdetail(Text) pluscodeund Zusatzfeldern.main.py:sessions_apiundsessions_versioninGET /health;session_idan jedem Chat (additiv);POST /agentmitsession_id; Followup409 session_busybzw.job_busy;DELETE /agent/{id}(eine explizite Session bleibt samt Workspace);PATCH /agent/{id}mit Notiz wirkt auf die Session;vote upin Mehr-Chat-Sessions409 session_multi_chat;with_workspacebei Klon und Export (Standardfalsein Mehr-Chat-Sessions); Zähler bei Archiv, Name, Import, Klon.jobs_store.py,agent_jobs.py,chat_bundle.py: Parameter für Workspace, Session undwith_workspace.backup_manager.py:sessions.jsoninserver-data.DELETE /sessions/{id}nimmt die Bestätigung als Query?confirm_workspace=trueoder im Body. Der Entwurf wird korrigiert (auch:delete_joblöscht auf dem Linux-Server den Workspace-Ordner eines Chats heute nicht).Geprüft:
tests/test_sessions.py: 85 Offline-Tests gegen frische Temp-Verzeichnisse (Logik und Routen mitTestClient). 20 absichtlich eingebaute Fehler (Besetzt-Prüfung, Größenlimit, Bestätigung beim Löschen, Spiegelung der Notiz, Zähler bei Layouts, Löschschutz außerhalb von/workspaces, …) wurden alle von mindestens einem Test gefangen.tests/test_sessions_live.py: 10 Tests gegen den Dev-Host, grün, nur Wegwerf-Objekte, danach nichts übrig (395 Chats wie vorher,sessions.jsonleer). Dabei belegt: Health-Felder,session_id, Verschieben (alte Dateien bleiben liegen),409-Fälle mitcode, Löschen nur mit Bestätigung, Klon und Export mit und ohne Workspace, ein echter Hermes-Lauf, der in der Session besetzt meldet und sofort abgebrochen wird.server-data/sessions.json.sessions_versionüberlebt einen Neustart.GET /sessionsbei 395 Chats 63 ms, nach Gruppierung der Chats 24 ms.-m "not slow"): 855 grün, 14 rot, siehe „Nicht geprüft“ zur Einordnung.Nicht geprüft:
test_backup.py(die Backups des Dev-Hosts sind 3,5 GB groß und brauchen etwa 4 Minuten, der Test wartet 60 s; im Server-Log gibt es keinen Traceback), vier async-Tests ohnepytest-asyncioin meiner lokalen Test-Umgebung,test_qwen_tts(503, Dienst nicht gestartet),test_vault_maintenance(Zeitüberschreitung),test_terminal(nur im Gesamtlauf rot, einzeln grün). Einen Vergleich mit dem Stand vor meiner Änderung habe ich nicht gemacht, weil der Dev-Host schon umgestellt war.workspace_patham Job) ist belegt.sessions.jsoninserver-data), ist nicht geprüft.Grenzen: Das Wire-Protokoll steht noch nur im Entwurf; der Abschnitt wandert in
02-Wire-Protokoll.md, sobald du die Umsetzung abgenommen hast. Layout-Schreibzugriffe sind nicht gegeneinander gesperrt (base_versionist optional). Die Dateien eines verschobenen Chats bleiben im alten Workspace.Offen: Die beiden Test-Backups à 3,5 GB (
Iris-Backup-2026-11-11-14-03.zipund…-14-09.zipin/data/backupsauf dem Dev-Host) sind von meinem Gesamtlauf übrig; der Dev-Host ist zu 97 % voll. Ich habe sie nicht gelöscht, das entscheidest du. Danach Etappe 2 iniris/rust-iris-nx#1(Client-Gerüst).PR #153 gemergt: fix(cors): PUT in den erlaubten Methoden, damit Browser Layouts und Verbindungen schreiben können (#151)
http://docker:3000/iris/iris-linux-server/pulls/153
Commits:
Fund bei Etappe 2 von
rust-iris-nx: CORS erlaubte keinPUTBefund: Beim Vorbereiten des Entwicklungs-Transports (Browser spricht den Server direkt an) habe ich die CORS-Antwort des Dev-Hosts geprüft:
access-control-allow-methods: GET, POST, DELETE, PATCH, OPTIONS, ohnePUT. Die Vorabfrage (OPTIONS) für einPUTwurde mit400 Disallowed CORS methodabgelehnt. Betroffen sind die Session-Routen für Layouts und Verbindungen (beidePUT) undPUT /settings/general. Hinter dem Gateway (gleiche Herkunft, kein CORS) wäre es nie aufgefallen; meine bisherigen Tests (Offline und Live ohneOrigin-Header) haben es nicht gesehen.Geändert:
main.py:PUTinallow_methods.tests/test_sessions_live.py: neuer Test, der die Vorabfrage mitOriginundAccess-Control-Request-Method: PUTfür drei Pfade prüft (Layout, Verbindung,settings/general).02-Wire-Protokoll.md(CORS-Abschnitt) wird im Wurzel-Repo nachgezogen.Geprüft: Der neue Test war gegen den alten Server rot (
400 Disallowed CORS method), nach dem Deploy auf den Dev-Host grün; alle 11 Live-Tests grün. Kein Chat lief beim Neustart.Nicht geprüft: ein echter Browser mit dem Entwicklungs-Transport (kommt mit
rust-iris-nx); der Mac-Server (hat Sessions nicht,PUT /settings/generaldort ungeprüft).Offen: Wie bisher (Abnahme, die beiden Test-Backups).