Repository navigation
feat(remote-server): Live-Verzeichnis und Vordergrundbefehl getrennter Sessions (#509) - #540
Merged
Merged
Conversation
…r Sessions melden Getrennte oder anderswo offene Zaplex-Sessions zeigten unter Verbindungen nur ihr Startverzeichnis, bei normalen Tabs also nichts (#509). - Proto: additives Feld `SessionInfo.live` (`SessionLiveMetadata` mit `cwd` und `foreground_command`) hinter der Capability `session-live-metadata-v1`, nur von Linux-Daemons angeboten. - Daemon: `remote_server::session_live` liest beim `ListSessions` aus `/proc` die Vordergrund-Prozessgruppe der PTY (`tpgid` der Shell), deren Verzeichnis (sonst das der Shell) und den Programmnamen. Argumente verlassen den Host nie; eine Gruppe aus fremder Session wird ignoriert. - Client: `live` nur von Daemons mit der Capability übernehmen; der Titel trägt nur noch die Agent-Identität, sonst bildet die Zeile „Host · Verzeichnis“ aus dem Live- bzw. Startverzeichnis. - Panel: Vordergrundbefehl im festen Metadaten-Slot vor „zuletzt geöffnet“. - Spezifikation (C6, PRODUCT, TECH, Fixture) und CI-Testfilter. Lokal weder kompiliert noch getestet; Compile und Tests laufen im nächsten ci-batch.
…Testliterale Befunde aus dem Codex-Zweitreview: - Interpreter melden nur echte Skriptdateien (Pfad oder Skriptendung). Inline-Code (-c, -e, --eval, -p), Modulnamen und Optionswerte fallen auf den Interpreternamen zurück, damit keine Argumentinhalte den Host verlassen. Umgeschriebene Prozesstitel liefern nur ihr erstes Wort. - Ist der Leader einer Vordergrund-Pipeline beendet, zählt das neueste lebende Mitglied derselben Prozessgruppe und Session. - SessionInfo-Literale in crates/remote_server/src/client_tests.rs um das neue Feld live ergänzt. Refs #509 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Worum es geht
Zweiter Teil von #509 (erster Teil: #539). Sessions, die nicht in diesem Fenster offen sind, zeigten unter Verbindungen bisher nur ihr Startverzeichnis. Für normale Tabs schickt der Client kein Verzeichnis mit, die Zeile blieb also leer bzw. fiel auf „Host · Terminal“ zurück. Gemeint sind getrennte und verwaiste Sessions sowie solche, die in einem anderen Fenster oder auf einem anderen Gerät offen sind. Der Daemon kannte weder das aktuelle Verzeichnis noch den Vordergrundbefehl einer PTY.
Änderungen
Protokoll (additiv, hinter Capability)
SessionInfo.live = 10vom TypSessionLiveMetadata { cwd, foreground_command }.session-live-metadata-v1(crates/zaplex_remote_session/src/types.rs). Nur Linux-Daemons bieten sie an, macOS-Daemons lassen sie ehrlich weg. Die Konstante liegt außerhalb vonapp/src/remote_server/**, gehört aber zum Capability-Flag.Daemon (
app/src/remote_server/session_live.rs, nurtarget_os = "linux")ListSessionsliest der Daemon aus/proc. Feld 8 (tpgid) aus/proc/<shell>/statnennt die Vordergrund-Prozessgruppe der PTY. Die Shell ist Session-Leader mit der PTY als Controlling-TTY (setsid+TIOCSCTTYim Spawn)./proc/<pid>/cwddes Vordergrundprozesses, sonst das der Shell.argv[0], bei bekannten Interpretern (node,python, …) der Skriptname, sonstcomm. Als Skript zählt nur ein Pfad oder eine Datei mit Skriptendung. Inline-Code (-c,-e,--eval,-p), Modulnamen und Optionswerte fallen auf den Interpreternamen zurück. Argumente verlassen den Host nie. Am leeren Prompt bleibt der Befehl leer.cat app.log | less), zählt das neueste lebende Mitglied derselben Prozessgruppe und Session.Client (
headless_connect.rs)livewird nur von Daemons mit der Capability übernommen (discard_unsupported_live_metadata). Alte Daemons fallen ehrlich auf das Startverzeichnis bzw. „Host · Terminal“ zurück.Panel (
ssh_manager/panel.rs)host · api, darunterclaude · zuletzt geöffnet vor 3 Stunden.Spezifikation:
#spec C6indocs/ui/cockpit-sidebar-connections.html, die Fixtureconnections-session-rows.html(Headless-Prüfung:passed, 186 Assertions), PRODUCT §2 und TECH (Connections).Tests (neu, im CI-Filter von
pr-check.yml)remote_server::session_live::tests: Vordergrundjob mit Verzeichnis und Programmname (Argumente bleiben draußen), leerer Prompt, Interpreter-CLI, unlesbares Verzeichnis (Rückfall auf die Shell), Prozessgruppe aus fremder Session, verschwundene Shell, Inline-Code beipython -c/node -e/perl -ne/ruby -e(nur der Interpretername), Modul- und Optionsoperanden, umgeschriebene Prozesstitel, Pipeline mit beendetem Leader, Pipeline ohne Überlebendelive_metadata_is_ignored_without_the_capability(headless_connect)detached_session_row_uses_daemon_live_cwd_and_foreground_commandold_daemon_without_live_metadata_falls_back_honestlysupported_features_advertises_live_session_metadata_on_linux/…_omits_…_without_procunmatched_agent_inventory_never_preserves_a_shell_title(Titel bleibt jetzt leer, Verzeichnis bleibt Identitätsquelle)Verifikation – ausdrücklich nicht gelaufen
no-new-cjk. Compile, Clippy und alle Tests kommen mit dem nächsten gebündeltenci-batchaufmain(pr-check.ymlund Workspace-nextest).rustfmt --checkauf den geänderten Dateien,git diff --check,script/check-compact-row-actions, die Headless-Fixture-Prüfung, ein eigenes Review und ein Codex-Zweitreview (siehe unten)./proc-Logik ist mit einem Fake-/procgetestet. Den echten Daemon auf einem Host prüft erst die Laufzeit.Review
Codex-Zweitreview (gpt-6, read-only), drei Befunde, alle berechtigt und im zweiten Commit behoben:
python3 -c "…"wurde Inline-Code als Befehlsname gemeldet. Jetzt meldet der Daemon nur echte Skriptdateien, sonst den Interpreternamen. Dazu kommen Negativtests. Die eigene Prüfung hatte denselben Fund. Auch umgeschriebene Prozesstitel wienpm run dev …liefern nur noch ihr erstes Wort.SessionInfo-Literale incrates/remote_server/src/client_tests.rshätten mit E0063 nicht kompiliert. Sie haben jetztlive: None. Die übrigen Literale im Repo nutzen..Default::default()./procläuft nur in diesem seltenen Fall.Kompatibilität
remote_server_binary()), Hosts behalten also bei gleicher Version ihren bisherigen Daemon. Die Live-Daten erscheinen erst mit der nächsten Version, die einen neuen Daemon ausrollt. Bis dahin zeigt der Client ehrlich den Fallback.Offen / Abhängigkeiten
Refs #509
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.