Chatverlauf: Zeitleiste mit Playhead, Detailstand und Klon zum Zeitpunkt #338
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#338
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
Ein geteilter Chat (grüner Daumen) liegt samt Workspace und Seitenpanel-Zustand als Ordner
Iris-Internal/Geteilte-Chats/<ID>/im Vault-Repo; jeder Export und jeder Job-Commit schreibt dort einen Stand. Diese Geschichte ist vorhanden, aber nicht zugänglich: Man kann einen früheren Stand eines Chats weder ansehen noch daraus weiterarbeiten.Wunsch
Im Kontextmenü eines Chats der Eintrag „Chatverlauf“. Er öffnet ein Sheet:
Umfang (Entscheidung Alf)
Gleich über Server-Routen, nicht über direkten Git-Zugriff der App. Das ändert das Wire-Protokoll und betrifft beide Server und alle Clients im selben Zug:
Entwicklerdokumentation/02-Wire-Protokoll.md): Zeitleiste (Commits des Chat-Ordners), Stand zu einem Commit (Nachrichten, Dateiliste mit Diff, Panel-Zustand), Klon aus Commit.IrisRemoteServer) und Linux-Server (eigenes Issue in iris/iris-linux-server).Offene Fragen / Risiken
git log -- <Ordner>; Granularität prüfen.PR #160 gemergt: docs(wire): Chatverlauf – Zeitleiste, Stand und Klon zum Zeitpunkt (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/160
Commits:
Stand: Schritt 1 (Protokoll-Spezifikation)
Befund: Die Historie existiert bereits im Vault-Repo (
Iris-Internal/Geteilte-Chats/<ID>/, ein Stand je Export/Job-Commit). Es fehlte nur der Zugang.Geändert:
Entwicklerdokumentation/02-Wire-Protokoll.md, neuer Abschnitt „Chatverlauf“:GET /agent/:id/history,GET /agent/:id/history/:commit,POST /agent/:id/history/:commit/clone. Gegenstücke angelegt: iris/iris-linux-server#147, iris/2ndbrain-ios#107.Geprüft: Ablage-Format und Klon-Route (
handleCloneAgent,importJob) im Mac-Code gelesen; Abschnitt gegen die bestehende Dokumentation „Geteilte Chats“ abgeglichen.Nicht geprüft: Kein Code geschrieben. Dass
messagesin der Form vonGET /agent/:id/messagesausmessages.jsonübersetzt werden kann, ist angenommen, nicht gegen den Code verifiziert. Ebenso das Verhalten bei fehlenden LFS-Objekten und die Kosten vonmessage_countbei langer Historie (Zwischenspeicher je Commit-SHA denkbar, da unveränderlich).Offen: Mac-Server-Routen, Linux-Server-Routen, Sheet (Mac), danach iOS und Linux-Client.
PR #339 gemergt: feat(history): Chatverlauf – Mac-Server-Routen für Zeitleiste, Stand und Klon (#338)
http://docker:3000/iris/Iris/pulls/339
Commits:
Stand: Schritt 2 (Mac-Server-Routen)
Geändert:
Iris/ChatHistoryCore.swift(neu, Git-Kern: Zeitleiste, Stand, Klon-Workspace, Wire-Form, mit Zwischenspeicher je Commit-SHA), drei Routen inIrisRemoteServer.swift(handleChatHistory*), Testscripts/test-chat-history-core.sh. Klon ruftimportJobmit dem Manifest des Standes (neuer Titel „ (Stand TT.MM.JJJJ HH:mm)“, frische Job-ID, keinshareID,vote: none).Geprüft:
scripts/test-chat-history-core.sh: 46 Prüfungen grün gegen echte Temp-Repos (Reihenfolge,limit/truncated, Nachrichtenzahl,workspace_changed, Status added/modified/deleted/unchanged, LFS-Zeiger mit Größe und Verfügbarkeit, Inhalt über Zeiger, Workspace-Stand des gewählten Commits, ungültige/fremde Commits, entteilt, Wire-Form).swiftc -parseaufIrisRemoteServer.swift.Nicht geprüft: Nicht in Xcode gebaut (kein
xcodebuildim Terminal); die Routen sind nie gegen die laufende App und den echten Vault aufgerufen worden. Echtes Git-LFS mit Forgejo (git lfs fetchnachladen) nicht ausprobiert, nur Zeiger-Parsing und lokales Objekt. Die Form vonmessagesgegenGET /agent/:id/messages(Wire-Form) ist nach Code nachgebaut, aber nicht Byte für Byte verglichen.Grenzen/Abweichung von der Spec:
available: falseheißt „lokal nicht geladen“ (nicht „nicht erreichbar“);note_pathist immernull, weil das Manifest die Notiz-Zuordnung nicht trägt; ein noch nicht committeter Export fehlt in der Zeitleiste. Spec entsprechend angepasst (alf/2ndbrain).Offen: Linux-Server-Routen (iris/iris-linux-server#147), Sheet in Iris.app/IrisClient.app, iOS (iris/2ndbrain-ios#107), Linux-Client.
PR #161 gemergt: docs(wire): Chatverlauf – LFS-Verfügbarkeit, note_path, Stand der Zeitleiste (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/161
Commits:
Spec angepasst (zu iris/Iris#338, PR iris/Iris#339):
available: false= lokal nicht geladen;note_pathimmernull; noch nicht committete Exporte fehlen in der Zeitleiste. Geprüft: Abschnitt gegen den Mac-Code abgeglichen. Nicht geprüft: Linux-Seite.PR #340 gemergt: feat(history): Chatverlauf – Sheet mit Zeitleiste, Playhead, Detailstand und Klon (#338)
http://docker:3000/iris/Iris/pulls/340
Commits:
Stand: Schritt 3 (Sheet in Iris.app und IrisClient.app)
Geändert:
Iris/ChatHistorySheet.swift(neu: Sheet, Zeitleiste mit Playhead alsChatHistoryTimelineBar, Reiter Nachrichten/Dateien/Seitenpanel, Fußzeile mit „Workspace-Dateien mitnehmen“ und „Als Klon anlegen“),Iris/RemoteChatHistory.swift(neu: Modelle und die drei Aufrufe als Erweiterung vonRemoteServerClient),RemoteJobListView.swift(Menüeintrag „Chatverlauf…“ nur beivote == "up", Sheet),RemoteServerClient.swift(parseMessagesals statische Funktion ausfetchMessages,urlSessionnicht mehrprivate,insertCreatedJob). Der Playhead rastet auf dem nächsten Stand ein; Pfeiltasten und die Pfeil-Schaltflächen springen von Stand zu Stand. Das Laden des Standes ist beim Ziehen um 150 ms entprellt. Beide Apps nutzen dieselben Dateien (Iris.app über das Remote-Fenster gegen den eigenen Mac-Server).Geprüft:
swiftc -typechecküber alle 348 Swift-Dateien vonIris/mit den Modulen aus DerivedData,-default-isolation MainActor: keine Fehler in den neuen oder geänderten Dateien (zwei bestehende SDK-Fehler inRemoteAppSession.swift, unabhängig davon). Kerntests (scripts/test-chat-history-core.sh, 46 Prüfungen) und Linux-Tests (10) weiter grün.Nicht geprüft: Nicht in Xcode gebaut, die Oberfläche nie gesehen oder bedient: Playhead-Ziehen, Aussehen, Reiter, Klon aus dem Sheet, Meldung bei übersprungenen Dateien. Das Sheet nie gegen einen echten Server mit echtem Verlauf geöffnet. Bei sehr vielen Ständen (Tausende) und gleichzeitig dichten Strichen ist die Leiste ungetestet.
Grenzen: Die Zeitleiste zeigt nur committete Stände. Notiz-Zuordnung (
note_path) ist immer leer. Klon bringt nicht den internen Hermes-Sitzungszustand mit.Offen: iOS (iris/2ndbrain-ios#107), Linux-Client, Handbuch/Doku des Menüeintrags.
PR #341 gemergt: feat(history): Nachrichten-Reiter springt beim Verschieben des Playheads ans Ende (#338)
http://docker:3000/iris/Iris/pulls/341
Commits:
Stand: Nachrichten-Reiter springt ans Ende (Nutzerwunsch beim Test auf der Mac-VM)
Geändert:
ChatHistorySheet.swift,messagesView:ScrollViewReadermit Anker am Ende der Nachrichten; bei jedem Wechsel des Standes springt die Ansicht nach unten (zweimal, mit 200 ms Abstand, weil die Zeilen derLazyVStackvor dem ersten Rendern nur geschätzte Höhen haben).Geprüft:
swiftc -typechecküber alle Swift-Dateien vonIris/: keine Fehler inChatHistorySheet.swift(die zwei bestehenden SDK-Fehler inRemoteAppSession.swiftbleiben).Nicht geprüft: Nicht in Xcode gebaut und nicht bedient. Ob der Sprung bei sehr langen Chats (Hunderte Nachrichten, variable Höhen, Bilder) genau am Ende landet, ist offen.
Offen: iOS-Gegenstück ist in iris/2ndbrain-ios#107; iris-web: iris/iris-web#45.
PR #162 gemergt: docs(wire): Chatverlauf – messages_changed und reason je Stand (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/162
Commits:
Spec: Zeitleiste um
messages_changedundreasonergänzt (Nutzerwunsch beim Test auf der Mac-VM).Warum: Ein hoher Strich sagte nur „Workspace geändert“; ob auch der Verlauf sich geändert hat, war nicht erkennbar, und als Betreff stand überall „Manuelle Änderung“. Der Job-Hook schreibt zwar
iris: <Beschreibung>und den letzten Prompt in den Commit, aber der Export des geteilten Chats kommt nach dem Hook-Commit und wird vom Vault-Wächter als „Manuelle Änderung“ committet (im Vault geprüft: alle 8 Commits des Chats „Raiden II Tilemap-Editor“). Deshalb wird der Grund aus den Nachrichten abgeleitet: der neu dazugekommene letzte Nutzer-Prompt; sonst ein aussagekräftiger Commit-Betreff; sonst leer. Das gilt auch für die schon vorhandene Historie.Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: Der Export selbst bleibt unverändert, der Betreff der Vault-Commits ändert sich nicht.
PR #342 gemergt: feat(history): Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund (#338)
http://docker:3000/iris/Iris/pulls/342
Commits:
Stand: Zeitleiste zeigt Verlauf und Workspace getrennt und den Grund der Änderung (Nutzerwunsch beim Test auf der Mac-VM)
Geändert:
ChatHistoryCore.swift:messagesChanged(Prüfsumme vonmessages.jsongegenüber dem Vorgänger) undreason(neuer letzter Nutzer-Prompt; sonst aussagekräftiger Commit-Betreff; sonst leer) je Stand, Wire-Feldermessages_changed,reason.RemoteChatHistory.swift: neue Felder (ältere Server:trueund leer).ChatHistorySheet.swift: jeder Strich hat zwei Hälften, oben der Verlauf (Akzentfarbe), unten der Workspace (grün), eine unveränderte Hälfte nur als kleiner Punkt; unter dem Datum steht der Grund (zwei Zeilen, Tooltip mit vollem Text), ohne Prompt ein Satz, was sich geändert hat; Legende angepasst; der Commit-Betreff „Manuelle Änderung“ steht nicht mehr in der Detailzeile.Geprüft:
scripts/test-chat-history-core.sh: 54 Prüfungen grün (u. a. Grund, Wächter-Betreff, Kürzung, Wire-Felder);swiftc -typechecküber alle Dateien vonIris/: keine Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler inRemoteAppSession.swift).Nicht geprüft: Nicht in Xcode gebaut und nicht bedient; das Aussehen der zweigeteilten Striche und die Zeile mit dem Grund nie gesehen. Der Export und die Commit-Betreffe im Vault sind unverändert: der Grund kommt aus den Nachrichten, nicht aus dem Commit-Body.
Offen: iris-web (iris/iris-web#45) muss die neuen Felder kennen.
PR #163 gemergt: docs(wire): Chatverlauf – Route für eine Datei im Stand eines Commits (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/163
Commits:
Spec: vierte Route
GET /agent/:id/history/:commit/file?path=(Nutzerwunsch beim Test auf der Mac-VM: Dateien aus der Dateiliste des Chatverlaufs auf den Desktop ziehen, im Stand des gewählten Zeitpunkts).Rohe Bytes der Workspace-Datei im Stand des Commits; 400 bei ungültigem Pfad, 404 bei unbekanntem Commit oder fehlender Datei, 413 über 200 MB. Beide Server setzen sie um. Geprüft: Abschnitt gegen die Tests beider Server abgeglichen. Nicht geprüft: gegen einen laufenden Server.
PR #343 gemergt: feat(history): Dateien aus dem Chatverlauf auf den Desktop ziehen (#338)
http://docker:3000/iris/Iris/pulls/343
Commits:
Stand: Dateien aus dem Chatverlauf auf den Desktop ziehen (Nutzerwunsch beim Test auf der Mac-VM)
Geändert:
IrisRemoteServer.swift: RouteGET /agent/:id/history/:commit/file?path=(handleChatHistoryFile: Pfadprüfung, Commit muss zur Zeitleiste gehören, Inhalt im Stand des Commits, 400/404/413).ChatHistoryCore.swift:isSafeRelativePath,knownCommit.RemoteChatHistory.swift:downloadChatHistoryFile.ChatHistorySheet.swift: Zeilen der Dateiliste sind per.onDragziehbar (NSItemProvider.registerFileRepresentation, die Datei kommt erst beim Ablegen vom Server und behält ihren Dateinamen); gelöschte Dateien sind nicht ziehbar (Tooltip „In diesem Stand gelöscht“).Geprüft:
scripts/test-chat-history-core.sh: 62 Prüfungen grün (u. a. Pfadprüfung, bekannter Commit, Inhalt der Datei im ersten und im dritten Stand, fehlende Datei);swiftc -typechecküber alle Dateien vonIris/ohne Fehler in den geänderten Dateien (zwei bestehende SDK-Fehler inRemoteAppSession.swift).Nicht geprüft: Nicht in Xcode gebaut, das Ziehen nie ausprobiert (nach Finder, Desktop, in ein anderes Programm); ob
.onDragauf einerList-Zeile auf macOS zuverlässig auslöst, ist offen. Dateien über 200 MB gehen nicht (413). Ziehen mehrerer Dateien auf einmal gibt es nicht.Offen: iOS hat dafür nichts (Ziehen auf den Desktop gibt es dort nicht); iris-web: iris/iris-web#45.
PR #344 gemergt: docs(handbuch): Kapitel Chatverlauf und Anwendungsbeispiel (#338)
http://docker:3000/iris/Iris/pulls/344
Commits:
Stand: Benutzerhandbuch um Chatverlauf und Anwendungsbeispiel ergänzt (auf ausdrücklichen Wunsch)
Neu: Kapitel „Chatverlauf – Sessions versionieren“ (Gruppe Vault, nach Vault-Synchronisation): öffnen (Mac, iPhone/iPad), Zeitleiste mit Playhead und den zwei Hälften je Strich, Grund eines Stands, die drei Reiter, Dateien auf den Desktop ziehen (Mac), Klon, wann ein Stand entsteht, Grenzen. Kapitel „Wie ich Iris selbst einsetze“ (Gruppe Erste Schritte): Homelab mit M3 Ultra, KI-Server mit zwei RTX-Karten, RTX 6000, mehr als zehn Instanzen mit eigenen Forgejos, Chats per Drag & Drop und über die Git-Server verschieben, Chatverlauf im Einsatz. Verweis im Kapitel Vault-Synchronisation. Gebaut mit
build_handbuch.py(33 Kapitel);Iris/Resources/BENUTZERHANDBUCH.mdneu erzeugt (nur Ergänzungen, keine anderen Kapitel verändert).Geprüft: Build läuft durch; Links der neuen Kapitel zeigen auf vorhandene Seiten; die Texte gegen den gebauten Stand des Chatverlaufs abgeglichen (nur Implementiertes, Grenzen genannt).
Nicht geprüft: Die Handbuch-Seiten nicht in der App (HilfeView) und nicht in der iOS-App angesehen; Handbuch-Ordner
Handbuch/undIrisRemote/Handbuch/sind ignoriert und lokal neu erzeugt, nicht im Repo. Das Anwendungsbeispiel enthält nur, was Alf dazu gesagt hat (Hardware, Instanzen, Drag & Drop, Forgejos, Chatverlauf); weitere Beispiele wären zu ergänzen. Der Builder löst[[Wikilinks]]nicht auf (gilt auch für bestehende Kapitel).Offen: Die Gesamtüberarbeitung des Handbuchs steht weiter aus.
PR #164 gemergt: docs(entwicklerdoku): Chatverlauf und Iris-Web mit Gateways (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/164
Commits:
Stand: Entwicklerdokumentation um Chatverlauf und Iris-Web ergänzt
Neu:
17-Chatverlauf.md(Datenherkunft aus dem Vault-Git, wie ein Stand entsteht und warum der Betreff nichts über den Grund sagt, Ableitung vonreason, Bausteine je Repo, LFS, Zwischenspeicher, Pfadsicherheit, Entscheidungen, Grenzen, offene Idee) und18-Iris-Web.md(Einordnung, Aufbau des Repos, Transporte und Sicherheit, die Gatewaysiris-web-linuxundiris-web-mac, Stand der Umsetzung, Entscheidungen in Kürze). Eingetragen inEntwicklerdokumentation/CLAUDE.md,ÖKOSYSTEM-INDEX.md(neuer Abschnitt 9, Linux-Client als veraltet markiert) und mit einem Verweis im Wire-Protokoll.Wichtig zum Gateway: Ein ausgeschriebener Gateway-Vertrag existiert nicht, und die Plugins
iris-web-linuxundiris-web-macsind nicht gebaut.18-Iris-Web.mdhält fest, was aus den Entscheidungen feststeht (Passwort-Login, Session-Cookie, Master-Token, LAN als Standard, Proxy-Modus, gemeinsame Vertragstests) und listet getrennt auf, was noch festzulegen ist (Pfade und Formate von Login/Session, Allowlist oder alle Routen, SSE und Binärdaten, Sitzungsdauer und Token-Rotation, Verhalten bei Desktop-only-Funktionen). Nichts davon ist erfunden; die Arbeit bleibt iris/iris-plugins#346, Schritt 1.Geprüft: Das Mermaid-Diagramm in
17-Chatverlauf.mdmitmermaid-validate(gültig); Pfade, Dateinamen und Issue-Nummern gegen die Repos und Issues abgeglichen.Nicht geprüft: Ob alle Angaben zu iris-web (Aufbau, Stand) mit dem laufenden Stand der Entwicklung dort übereinstimmen; das Repo wird parallel weiterentwickelt.
frontend/iris-web/CLAUDE.mdbehauptet weiterhin, der Gateway-Vertrag stehe in der Entwicklerdokumentation (steht jetzt in18-Iris-Web.md, aber als offene Stelle); diese Datei habe ich nicht angefasst.PR #165 gemergt: docs(entwicklerdoku): 17-Chatverlauf.md und 18-Iris-Web.md nachgereicht (iris/Iris#338)
http://docker:3000/alf/2ndbrain/pulls/165
Commits:
Nachtrag: die beiden Dateien fehlten im vorigen PR.
Entwicklerdokumentation/17-Chatverlauf.mdund18-Iris-Web.mdwaren beim erstenshipnicht versioniert (-avergessen); gemergt waren nur die Verweise darauf (CLAUDE.md, ÖKOSYSTEM-INDEX, Wire-Protokoll), die Links liefen also kurz ins Leere. Mit diesem PR liegen beide Dateien im Repo; Inhalt wie im Kommentar zum vorigen PR beschrieben.Geprüft: Nach dem Ship
git ls-filesauf beide Dateien (siehe unten im Ablauf) undgit statusohne??.