Terminal auf iPhone/iPad: Vollbild-Fenster für Claude-Sessions und Shell (Gegenstück iris/Iris) #77

Open
opened 2026-10-31 14:10:53 +00:00 by alf · 3 comments
Owner

Gegenstück zu iris/Iris (Terminal im Mac-Server, Entscheidungen und Etappen dort). Hier: Vollbild-Fenster für das Terminal (WebView auf die vom Server ausgelieferte Seite, Tastenleiste), Öffnen per Link aus der Claude-Sessions-Seite (Navigation abfangen, keine Skript-Brücke), Einstieg „Terminal“ für die freie Shell im „…“-Menü (nur sichtbar, wenn das Gerät freigegeben ist). Der Schalter Gerät/Mac (openLocallyOnTap) bestimmt, ob „Fortsetzen“ in der App oder auf dem Mac läuft.

Gegenstück zu iris/Iris (Terminal im Mac-Server, Entscheidungen und Etappen dort). Hier: Vollbild-Fenster für das Terminal (WebView auf die vom Server ausgelieferte Seite, Tastenleiste), Öffnen per Link aus der Claude-Sessions-Seite (Navigation abfangen, keine Skript-Brücke), Einstieg „Terminal“ für die freie Shell im „…“-Menü (nur sichtbar, wenn das Gerät freigegeben ist). Der Schalter Gerät/Mac (`openLocallyOnTap`) bestimmt, ob „Fortsetzen“ in der App oder auf dem Mac läuft.
Author
Owner

PR #78 gemergt: feat(terminal): Vollbild-Terminal, Link aus dem Plugin-Panel, Theme-Brücke im Panel (#77)
http://docker:3000/iris/2ndbrain-ios/pulls/78

Commits:

  • feat(terminal): Vollbild-Terminal, Link aus dem Plugin-Panel, Theme-Brücke im Panel (#77)

Stand: Terminal im Vollbild auf dem iPhone/iPad, Link aus dem Plugin-Panel (E2, iOS)

Geändert:

  • Neu TerminalSupport.swift: TerminalClient (GET /terminal/access, POST /terminal/open; Fehler 403/429 mit lesbarem Text), TerminalScreen (Vollbild mit der vom Server ausgelieferten Terminal-Seite; Sitzung, Token und Geräte-ID im Fragment der Adresse), eigene WKWebView ohne die Leiste über der Tastatur (inputAccessoryView = nil, die Seite bringt ihre Tastenleiste mit), Zertifikat gegen den beim Koppeln gemerkten Fingerabdruck (PinnedRemoteHTMLView.respondToServerTrustChallenge), „Trennen“ (iris-terminal://detach) schließt das Fenster, die Sitzung läuft auf dem Mac weiter.
  • PinnedRemoteHTMLView (gemeinsame WebView für Anhänge und das Plugin-Panel): bekommt die Theme-Brücke (irisFollowTheme()): Lücke aus der WebView-Umstellung geschlossen, das Plugin-Panel nutzt diese Klasse und nicht PluginCanvasWebView; neue optionale Parameter hostCapabilities (window.irisHost.terminal = {available, target}, live bei Änderung und nach jedem Seitenladen) und onTerminalOpen. Das Abfangen von iris-terminal://open wirkt nur mit gesetztem Handler (nur das Plugin-Panel), andere Aufrufer, auch vom Agenten erzeugte HTML-Seiten, bleiben wirkungslos; über die Adresse öffnet sich nur Claude Code (UUID-Prüfung der session_id), nie eine freie Shell.
  • ChatPluginPanelPageView: fragt die Freigabe ab (beim Laden, beim Sichtbarwerden und beim Zurückkehren in den Vordergrund), gibt der Seite den Schalter Gerät/Mac (openLocallyOnTap) und öffnet bei der Anfrage der Seite das Terminal; Fehler als Hinweis.

Geprüft: xcodebuild für den iOS-Simulator: BUILD SUCCEEDED. Die Gegenseite ist am echten Server geprüft (iris/Iris#274: 19/19) und die Plugin-Seite im Browser (iris/iris-plugins#328: 9 neue Prüfungen, 201 Unit-Tests); die Terminal-Seite im Headless-Chrome gegen einen Nachbau der Routen.

Nicht geprüft: Alles in der App selbst: das Abfangen der Adresse, die Vollbild-WebView mit Zertifikat-Pinning, die Tastenleiste und Bildschirmtastatur auf dem iPhone, Trennen, das Verhalten beim Verbindungsverlust. Nicht auf dem Gerät installiert (nur Simulator-Build).

Bekannte Lücke: Eine getrennte Sitzung läuft weiter; die Sessions-Seite zeigt sie dann als „läuft“ und sperrt „Fortsetzen“. Zurück in die Sitzung führt erst die Liste offener Sitzungen (E4, „Terminal“ im „…“-Menü), die in einem eigenen Schritt folgt.

PR #78 gemergt: feat(terminal): Vollbild-Terminal, Link aus dem Plugin-Panel, Theme-Brücke im Panel (#77) http://docker:3000/iris/2ndbrain-ios/pulls/78 Commits: - feat(terminal): Vollbild-Terminal, Link aus dem Plugin-Panel, Theme-Brücke im Panel (#77) --- **Stand: Terminal im Vollbild auf dem iPhone/iPad, Link aus dem Plugin-Panel (E2, iOS)** **Geändert:** - Neu `TerminalSupport.swift`: `TerminalClient` (`GET /terminal/access`, `POST /terminal/open`; Fehler 403/429 mit lesbarem Text), `TerminalScreen` (Vollbild mit der vom Server ausgelieferten Terminal-Seite; Sitzung, Token und Geräte-ID im Fragment der Adresse), eigene `WKWebView` ohne die Leiste über der Tastatur (`inputAccessoryView = nil`, die Seite bringt ihre Tastenleiste mit), Zertifikat gegen den beim Koppeln gemerkten Fingerabdruck (`PinnedRemoteHTMLView.respondToServerTrustChallenge`), „Trennen“ (`iris-terminal://detach`) schließt das Fenster, die Sitzung läuft auf dem Mac weiter. - `PinnedRemoteHTMLView` (gemeinsame WebView für Anhänge und das Plugin-Panel): bekommt die Theme-Brücke (`irisFollowTheme()`): **Lücke aus der WebView-Umstellung geschlossen**, das Plugin-Panel nutzt diese Klasse und nicht `PluginCanvasWebView`; neue optionale Parameter `hostCapabilities` (`window.irisHost.terminal = {available, target}`, live bei Änderung und nach jedem Seitenladen) und `onTerminalOpen`. Das Abfangen von `iris-terminal://open` wirkt **nur mit gesetztem Handler** (nur das Plugin-Panel), andere Aufrufer, auch vom Agenten erzeugte HTML-Seiten, bleiben wirkungslos; über die Adresse öffnet sich **nur Claude Code** (UUID-Prüfung der `session_id`), nie eine freie Shell. - `ChatPluginPanelPageView`: fragt die Freigabe ab (beim Laden, beim Sichtbarwerden und beim Zurückkehren in den Vordergrund), gibt der Seite den Schalter Gerät/Mac (`openLocallyOnTap`) und öffnet bei der Anfrage der Seite das Terminal; Fehler als Hinweis. **Geprüft:** `xcodebuild` für den iOS-Simulator: BUILD SUCCEEDED. Die Gegenseite ist am echten Server geprüft (iris/Iris#274: 19/19) und die Plugin-Seite im Browser (iris/iris-plugins#328: 9 neue Prüfungen, 201 Unit-Tests); die Terminal-Seite im Headless-Chrome gegen einen Nachbau der Routen. **Nicht geprüft:** Alles in der App selbst: das Abfangen der Adresse, die Vollbild-WebView mit Zertifikat-Pinning, die Tastenleiste und Bildschirmtastatur auf dem iPhone, Trennen, das Verhalten beim Verbindungsverlust. Nicht auf dem Gerät installiert (nur Simulator-Build). **Bekannte Lücke:** Eine getrennte Sitzung läuft weiter; die Sessions-Seite zeigt sie dann als „läuft“ und sperrt „Fortsetzen“. Zurück in die Sitzung führt erst die Liste offener Sitzungen (E4, „Terminal“ im „…“-Menü), die in einem eigenen Schritt folgt.
Author
Owner

PR #79 gemergt: feat(terminal): Terminal-Eintrag im Menü, Liste offener Sitzungen, neue Shell (iris/2ndbrain-ios#77)
http://docker:3000/iris/2ndbrain-ios/pulls/79

Commits:

  • feat(terminal): Terminal-Eintrag im Menü, Liste offener Sitzungen, neue Shell (iris/2ndbrain-ios#77)

Stand: Etappe 4 (iOS) – Terminal-Eintrag im „…“-Menü und Liste offener Sitzungen

Geändert

  • Neuer Menüpunkt „Terminal“ im „…“-Menü (Hauptliste und Chat), nur sichtbar, wenn der Mac das Terminal für dieses Gerät freigegeben hat (TerminalAccess, aktualisiert bei Verbindungswechsel und beim Zurückkehren in den Vordergrund).
  • TerminalListSheet: offene und kürzlich beendete Sitzungen dieses Geräts (GET /terminal/list), Tippen hängt wieder an (Scrollback), Wischen „Beenden“ (POST /terminal/<id>/close), „Neue Shell“ öffnet eine freie Shell.
  • Damit lässt sich eine getrennte Claude-Session wieder öffnen, obwohl die Sessions-Seite sie als „läuft“ zeigt.

Geprüft

  • Build für den iOS-Simulator erfolgreich.

Nicht geprüft

  • Alles auf dem Gerät (Menüpunkt-Sichtbarkeit, Liste, Wieder-Anhängen, Beenden, Neue Shell).
  • Verhalten, wenn die Freigabe während geöffneter Liste entzogen wird.

Offen

  • Mac-Remote-Fenster mit Gerät/Mac-Schalter und freier Shell (Etappe 3), Linux-Server-Gegenstück, Handbuch.
PR #79 gemergt: feat(terminal): Terminal-Eintrag im Menü, Liste offener Sitzungen, neue Shell (iris/2ndbrain-ios#77) http://docker:3000/iris/2ndbrain-ios/pulls/79 Commits: - feat(terminal): Terminal-Eintrag im Menü, Liste offener Sitzungen, neue Shell (iris/2ndbrain-ios#77) --- **Stand: Etappe 4 (iOS) – Terminal-Eintrag im „…“-Menü und Liste offener Sitzungen** **Geändert** - Neuer Menüpunkt „Terminal“ im „…“-Menü (Hauptliste und Chat), nur sichtbar, wenn der Mac das Terminal für dieses Gerät freigegeben hat (`TerminalAccess`, aktualisiert bei Verbindungswechsel und beim Zurückkehren in den Vordergrund). - `TerminalListSheet`: offene und kürzlich beendete Sitzungen dieses Geräts (`GET /terminal/list`), Tippen hängt wieder an (Scrollback), Wischen „Beenden“ (`POST /terminal/<id>/close`), „Neue Shell“ öffnet eine freie Shell. - Damit lässt sich eine getrennte Claude-Session wieder öffnen, obwohl die Sessions-Seite sie als „läuft“ zeigt. **Geprüft** - Build für den iOS-Simulator erfolgreich. **Nicht geprüft** - Alles auf dem Gerät (Menüpunkt-Sichtbarkeit, Liste, Wieder-Anhängen, Beenden, Neue Shell). - Verhalten, wenn die Freigabe während geöffneter Liste entzogen wird. **Offen** - Mac-Remote-Fenster mit Gerät/Mac-Schalter und freier Shell (Etappe 3), Linux-Server-Gegenstück, Handbuch.
Author
Owner

PR #80 gemergt: chore(i18n): Localizable.xcstrings um Terminal-Texte ergänzt (iris/2ndbrain-ios#77)
http://docker:3000/iris/2ndbrain-ios/pulls/80

Commits:

PR #80 gemergt: chore(i18n): Localizable.xcstrings um Terminal-Texte ergänzt (iris/2ndbrain-ios#77) http://docker:3000/iris/2ndbrain-ios/pulls/80 Commits: - chore(i18n): Localizable.xcstrings um Terminal-Texte ergänzt (iris/2ndbrain-ios#77)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/2ndbrain-ios#77
No description provided.