Skip to content

feat: /ps:logs page scrolling and minimal footer hints with ? keybinds overlay - #96

Merged
aliou merged 2 commits into
fix/log-viewer-dead-scrollfrom
feat/logs-paging-and-hints
Aug 22, 2026
Merged

feat: /ps:logs page scrolling and minimal footer hints with ? keybinds overlay#96
aliou merged 2 commits into
fix/log-viewer-dead-scrollfrom
feat/logs-paging-and-hints

Conversation

@378-kaiabot

@378-kaiabot 378-kaiabot Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Note

Automated pull request by Pi, model aperture/glm-5.2. Implemented and validated empirically against
aliou/pi-processes on branch fix/log-viewer-dead-scroll (stack top feat/logs-paging-and-hints). See the local run log for the full investigation.

Summary

Two related changes to the /ps:logs overlay and /ps overview footers:

  1. Page scrolling (/ps:logs overlay has no page up/down (or half-page) keybindings #77) — the logs overlay handled line scrolling (j/k, arrows) and jump-to-top/bottom (g/G) but PageUp/PageDown and ctrl+u/ctrl+d were no-ops. Confirmed empirically before the fix by running the issue's repro test against LogOverlayComponent: PAGE_DOWN never cleared following and PAGE_UP left L50/50 unchanged. Now pgup/pgdn scroll a full viewport (logRows()) and ctrl+u/ctrl+d half a viewport, reusing the same anchor write-back as line scrolling so the Dead scroll zone in /ps:logs after jumping to the top — j/k do nothing for ~a screenful #76 dead-zone fix covers them.

  2. Minimal footer hints + ? keybinds overlay — the footers were getting crowded. Hints whose key letter occurs in their word now render as just the word with the key letter in accent + bold:

Before After
w wrap wrap (bold accent w)
f follow follow
c clear / s sort / x kill clear / sort / kill
q close, j/k scroll, / search unchanged (key not in word)

When the list does not fit the footer width, a leading ? more affordance appears; pressing ? opens a stacked overlay on top of the overlay (herdr-style keybinds panel: grouped sections, aligned key/description columns, inverse esc close pill). In /ps:logs search mode the panel prepends a search group (n / N, /, esc) since those keys only exist there.

Changes

  • extensions/processes-logs/components/log-overlay-component.ts — page/half-page scroll handling (Key.pageUp/pageDown, Key.ctrl("u"/"d")); footer renders via renderShortcutHints; ? opens the stacked keybinds panel; panel disposer invoked from dispose() so a background close (auto-hide, kill) cannot leak it.
  • extensions/processes/components/overview-component.ts — same footer/? treatment for the /ps overview; added the previously-undocumented g/G preview jump to both the footer and the panel.
  • extensions/shared/shortcut-hints.ts — hint rendering (minimal key-in-word form with per-segment state styling for wrap/stdout+stderr, classic form otherwise) and the ? more collapse that keeps the hints that still fit.
  • extensions/shared/shortcuts-overlay.ts — the keybinds panel component and showShortcutsOverlay (pushes onto tui.showOverlay, centered, width computed from the longest aligned row, clamped 36–72; idempotent disposer).
  • .agents/skills/pi-processes-testing/SKILL.md — manual QA checklist updated with the new keys, the minimal-hint display, and the ? panel.
  • .changeset/logs-paging-and-hints.md — minor bump.

Live QA (herdr)

Driven from a herdr tab running pi -ne -e . in this repo; the agent started a ticker process via the process tool (1 line/s, later 0.1 s/s). Runtime-verified: PageUp moves off following to 60% L78/131; the footer collapses to ? more … on narrow widths; ? stacks the keybinds panel over both the logs overlay and /ps; q/esc dismiss it.

Verification

  • pnpm typecheck
  • pnpm lint ✅ (biome, 200 files)
  • pnpm test ✅ 638 passed (61 files; +33 tests: page/half-page scrolling incl. clamping, minimal-hint rendering incl. per-segment styling, ? more collapse bounds, panel layout/alignment/dismiss keys, disposer lifecycle in both hosts)

Closes #77

Stacked on #95 — merge that first.


Run host: golden-hugo-lefevre · Session: 01a010a1-f8de-7eef-8459-680c1ac2cd9a · Model: aperture/glm-5.2

@378-kaiabot 378-kaiabot Bot changed the title feat/logs paging and hints feat: /ps:logs page scrolling (#77) and minimal footer hints with ? keybinds overlay Aug 17, 2026
@378-kaiabot
378-kaiabot Bot force-pushed the feat/logs-paging-and-hints branch from 21e3480 to e399188 Compare August 17, 2026 20:28
@378-kaiabot
378-kaiabot Bot force-pushed the feat/logs-paging-and-hints branch from e399188 to 41f77be Compare August 17, 2026 20:54
Page scrolling: pgup/pgdn move the /ps:logs viewport by a full page and
ctrl+u/ctrl+d by half a page, through the same scrollBy anchor path as
line scrolling.

Footer hints: single-letter shortcuts whose key letter occurs in their
word render as the word with the key letter in accent + bold (w wrap ->
wrap); other hints keep the classic '<key> <word>' display. When the
hint list does not fit the footer, a leading '? more' affordance appears
and pressing ? opens a stacked keybinds panel (grouped sections, aligned
key/description columns, esc close pill) listing every key; while a
search is active the panel prepends a search group.

Both overlays dispatch keys through a parseKey action table instead of a
matchesKey chain.
@378-kaiabot
378-kaiabot Bot force-pushed the feat/logs-paging-and-hints branch from 41f77be to 31f8b5e Compare August 18, 2026 08:32
@aliou aliou changed the title feat: /ps:logs page scrolling (#77) and minimal footer hints with ? keybinds overlay feat: /ps:logs page scrolling and minimal footer hints with ? keybinds overlay Aug 21, 2026
@aliou
aliou marked this pull request as ready for review August 21, 2026 13:58
@aliou
aliou merged commit 54921aa into main Aug 22, 2026
2 checks passed
@aliou
aliou deleted the feat/logs-paging-and-hints branch August 22, 2026 11:20
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.

/ps:logs overlay has no page up/down (or half-page) keybindings

2 participants