feat(frontend): open a live session straight to its pending gate
Opening an in-progress session that has a live Pi runtime now reconnects to its pending gate instead of the empty landing screen that read as "stopped". Cold/completed sessions keep the read-only documents panel with its explicit Resume, so a mere click never spawns a runtime. Backend GET /sessions now reports a per-session `active` flag (live runtime bound) to drive this. Also: - "New session" now closes any open session detail panel (left box). - The model-activity separator can be dragged to a full 50/50 split (was capped at 576px); central-min still guards narrow viewports. Test fixes uncovered along the way: - Node 25 ships an experimental global localStorage that shadows jsdom's and lacks clear(), failing every jsdom test at setup; install a spec-compliant in-memory Storage (feature-detected, inert on CI/LTS). - Fix 4 pre-existing session-mgmt tests that used an ambiguous getByText for a session shown in both nav and header; target the nav item by test id. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -122,7 +122,17 @@ export function AppShell() {
|
||||
|
||||
function openPanel(id: string) {
|
||||
const s = sessions.find((x) => x.id === id);
|
||||
if (s) { setPanelSession(s); setShowActivity(false); }
|
||||
if (!s) return;
|
||||
// A session with a live Pi runtime opens straight into its live view: doResume
|
||||
// reconnects to the already-active runtime and replays its pending gate, so an
|
||||
// in-progress session never shows an empty screen that reads as "stopped". Cold or
|
||||
// completed sessions keep the read-only documents panel (with its explicit Resume),
|
||||
// so a mere click never spawns a runtime.
|
||||
if (s.active && s.status === "open" && !s.archived && !isForeignSession(s)) {
|
||||
void doResume(id);
|
||||
return;
|
||||
}
|
||||
setPanelSession(s); setShowActivity(false);
|
||||
}
|
||||
function toggleActivity() {
|
||||
setShowActivity((v) => {
|
||||
@@ -351,6 +361,9 @@ export function AppShell() {
|
||||
function startNewSession() {
|
||||
invalidateResumeIntent();
|
||||
resetSession();
|
||||
// Starting a new question closes any open session detail panel: the reader is
|
||||
// moving away from that session, so its left-hand box must not linger.
|
||||
setPanelSession(null);
|
||||
setAwaitingQuestion(true);
|
||||
setCreatingSession(false);
|
||||
selectActiveSession(null);
|
||||
|
||||
Reference in New Issue
Block a user