Skip to content

Add a focused Linux session workspace - #72

Merged
bifrost0x merged 18 commits into
mainfrom
dev/product-adoption-redesign
Aug 4, 2026
Merged

Add a focused Linux session workspace#72
bifrost0x merged 18 commits into
mainfrom
dev/product-adoption-redesign

Conversation

@bifrost0x

@bifrost0x bifrost0x commented Aug 3, 2026

Copy link
Copy Markdown
Owner

What changed

  • Add an optional single-session SFTP panel beside the active SSH terminal.
  • Embed the existing full SFTPFileManager as a single remote pane instead of maintaining a reduced second implementation.
  • Retain navigation, preview, multi-selection, context actions, uploads, downloads, drag-and-drop, mutations, transfer queue, and keyboard handling.
  • Keep the panel limited to the 1-pane layout, automatically follow the active session, and close it on layout changes or disconnect.
  • Correlate directory and home requests so stale responses cannot replace newer navigation or leak state across sessions.
  • Add live Linux CPU, memory, root-disk, uptime, and OS insights with a four-second refresh interval.
  • Pause insight polling when the workspace is hidden, collapsed, or below the supported desktop viewport.
  • Prevent hidden terminal buffers from being resized and reflowed when switching session tabs.
  • Document the focused workspace with a 2560x1440 capture.

Why

The single-session workflow previously required opening the separate dual-pane file manager and offered no compact view of the connected server's current health. This adds a focused operational workspace while preserving the established file-manager behavior and the existing 2-pane and 4-pane terminal layouts.

Scope and impact

The embedded view hides only the second file pane, source selector, and dual-pane transfer controls. The regular dual-pane file-manager modal remains available and uses the same manager instance.

The live server insights are Linux-only and collected through bounded, ownership-checked SSH requests. RDP and VNC are intentionally outside this change.

The broader README and product-site refresh was integrated separately into main and is no longer part of this PR.

Validation

  • python -m pytest tests -q - 1359 passed, 33 skipped
  • npm run test:js - 104 passed
  • npx playwright test tests/e2e/session-workspace.spec.js --forbid-only - 2 passed
  • npm run vendor:check - 10 vendored assets verified
  • docker compose config --quiet
  • JavaScript syntax checks and git diff --check
  • Independent code review: no remaining Critical, Important, or Minor findings

@bifrost0x bifrost0x self-assigned this Aug 3, 2026
@bifrost0x
bifrost0x marked this pull request as ready for review August 4, 2026 10:56
@bifrost0x
bifrost0x merged commit 18415ba into main Aug 4, 2026
15 of 16 checks passed
@bifrost0x
bifrost0x deleted the dev/product-adoption-redesign branch August 4, 2026 10:58

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 45e0be4098

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +20 to +24
let totalDelta = 0;
for (let index = 0; index < length; index += 1) {
const delta = Number(current[index]) - Number(previous[index]);
if (!Number.isFinite(delta) || delta < 0) return null;
totalDelta += delta;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exclude guest counters from the CPU total

On Linux hosts running virtual machines, /proc/stat includes guest and guest_nice after the core counters, but those values are already included in user and nice. Summing every field here double-counts guest execution; for example, equal guest and idle deltas are reported as roughly 67% utilization instead of 50%. Limit the total to non-duplicated fields or subtract the guest counters before calculating the percentage.

Useful? React with 👍 / 👎.

Comment on lines +179 to +183
visible = normalized;
clearPolling();
if (visible) {
render(currentState(connected ? 'loading' : 'disconnected'));
startPolling();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reset the CPU baseline when polling resumes

When the page or notepad is hidden for an extended period, resuming polling reuses the sample stored before polling stopped. The first supposedly live CPU value therefore represents the average over the entire hidden interval rather than the current four-second window, and the same problem occurs when returning to a previously selected session. Invalidate that session's previous CPU sample when polling is interrupted so the first resumed response establishes a new baseline.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant