Commit Graph

118 Commits

Author SHA1 Message Date
vasilito 6e7c17d811 0.3.1: sync all Cat 1 + Cat 2 versions to +rb0.3.1 2026-07-11 11:21:22 +03:00
vasilito 4685a5deed redbear-power: parse Ngid and TracerPid procfs fields instead of ignoring
Adds ngid and tracer_pid fields to ProcStatus struct. These were
previously silently discarded during /proc/<pid>/status parsing.
2026-07-10 14:20:03 +03:00
vasilito 0ec7bd46bb Phase 3: GPU 3D drivers + Phase 1-2 stability fixes — full rollup
ROLLUP of all Phase 1-3 work on branch 0.3.0, targeting a production-ready
console + full graphical desktop under Intel and Virgl/VirtIO-GPU.

=== Phase 1 — Stability ===
 - fbcond: Enter key handler (scancode 0x1C→\n), display map buffering,
   control-char filter in all 7 keymaps, write_event assert
 - build-redbear.sh: auto-rebuild-prefix when fork timestamps are newer
   than prefix/x86_64-unknown-redox/sysroot (was warning-only). Added
   configurable REDBEAR_SKIP_PREFIX_REBUILD guard.
 - build-redbear.sh: set explicit keymap '-K us' in console activation
 - config/redbear-device-services.toml: remove spurious init.d service
   files for redbear-acmd/ecmd/usbaudiod. These USB device daemons are
   spawned dynamically by pcid-spawner, not as boot-time init services.
   Starting them without args panicked the boot flow.
 - relibc: grantpt/unlockpt/ptsname (then deduplicated against stdlib)
 - userutils: cherry-pick upstream getty commit 2834434 (standard C
   ptsname/grantpt/unlockpt)
 - base fork: Russian (ЙЦУКЕН) keymap + inputd control-char filter
   (K_ESC/K_BKSP/K_ENTER → \0, commit 73e44d81 in submodule/base)

=== Phase 2 — Login & Console ===
 - login.rs: restored to 0.2.5-known-good liner-based prompt
 - redbear-upower: removed tokio full/signal features → protection fault fix
 - redbear-power: excluded temporarily (being fixed in other session)
 - tlc version: updated to 0.3.0

=== Phase 3 — GPU/3D Drivers (commit 0898332f7a) ===
Intel i915: FULLY implemented — real ring buffer + MMIO command
submission via GEM DMA → GGTT → i915 render ring, with hardware
head-pointer polling (2M iterations, 50µs backoff). Zero stubs.

VirtIO GPU/Virgl (VirtioTransport): 11 VIRTGPU ioctls (GETPARAM,
GET_CAPS, RESOURCE_CREATE, RESOURCE_INFO, CONTEXT_INIT, EXECBUFFER,
WAIT, TRANSFER_TO_HOST, TRANSFER_FROM_HOST, MAP, CREATE_BLOB) ported
from Linux 7.1 virtgpu_ioctl.c and virtgpu_vq.c.
 - driver.rs: 8 virgl_* trait methods (default Unsupported)
 - scheme.rs: 11 ioctl constants + 8 wire structures + dispatch
 - virtio/transport.rs: PCI capability discovery, feature negotiation,
   control+cursor virtqueue setup, vring descriptor building
 - virtio/mod.rs: real implementations for all 8 virgl_* methods
 - intel/mod.rs: explicit virgl Unsupported stubs

Other changes from active sessions: Cargo.toml version bumps, linux-kpi
headers, libpciaccess recipe, mesa/recipe.toml, kf6 patches, expat,
driver-manager, redbear-sessiond, redbear-compositor, cub, tlc, and
many other local recipes.
2026-07-09 20:29:28 +03:00
vasilito 550551d8bc fix: migrate all local recipe Cargo.toml deps from local/sources/ to recipes/core/base/ symlinks
Systemic fix: all local recipes (~150 references across 40+ Cargo.toml files)
now resolve libredox, redox_syscall, and redox-scheme through
recipes/core/base/ symlinks instead of local/sources/ paths.
Eliminates lockfile collision between Cargo's resolution of the same
package through different path strings (local/sources/ vs recipes/core/base/).

This is required because the base recipe's workspace Cargo.toml resolves
these deps through recipes/core/base/ (via symlink chain from the
recipe copy location), and Cargo treats different path strings to the
same directory as different packages.
2026-07-09 15:31:01 +03:00
vasilito d85702a3ca docs: resolve IMPROVEMENT-PLAN, update MASTER+RAPL plans, add RAPL energy reader
IMPROVEMENT-PLAN: marked RESOLVED (38/38 items done). Now historical record.

IMPLEMENTATION-MASTER-PLAN: removed quality gap references, added status
tables for active vs resolved subsystem plans.

RAPL-IMPLEMENTATION-PLAN: P0 blocker resolved — MSR scheme exists at
src/scheme/sys/msr.rs. Proceed to Phase 1.

redbear-power/sensor.rs: added RAPL energy register reader:
- MSR_PKG_ENERGY_STATUS (0x611) — Package domain
- MSR_PP0_ENERGY_STATUS (0x639) — Core domain
- MSR_PP1_ENERGY_STATUS (0x641) — Graphics domain
- MSR_DRAM_ENERGY_STATUS (0x619) — DRAM domain
- read_rapl_energy(), read_rapl_energy_unit(), read_rapl_energy_uj()
- RaplDomain enum (Package/Core/Graphics/Dram)
- Energy unit conversion: MSR_RAPL_POWER_UNIT (0x606) ESU bits
Cross-referenced with Linux 7.1 arch/x86/events/intel/rapl.c.
2026-07-09 01:02:00 +03:00
vasilito eeb0292572 redbear-power: consume real /scheme/coretemp and /scheme/sys/cpu sources 2026-07-08 01:14:26 +03:00
vasilito 6e808741ea redbear-power: per-core governor display and Ctrl+g control 2026-07-07 22:16:27 +03:00
vasilito 596407a52d redbear-power: upower client + render/sensor/battery/dmi updates 2026-07-07 22:00:54 +03:00
vasilito fc34718ae8 redbear-power: update stale docstrings for Redox process control and MSR temperature fallback 2026-07-07 21:10:33 +03:00
vasilito 9e6851d43c USB: P3 scheme service wrapper — redbear-ftdi registers /scheme/ttys/usbFTDI_<N>
Same pattern as acmd: FtdiScheme with Mutex<XhciEndpHandle>,
SchemeSync impl, Socket::create() + register on Redox,
stdout fallback on host/Linux.
2026-07-07 19:24:46 +03:00
vasilito 8641f22bd1 redbear-power: DRY /proc/loadavg parsing 2026-07-07 17:31:45 +03:00
vasilito 72fc7c6f87 redbear-power: wire package thermal status into header 2026-07-07 17:29:53 +03:00
vasilito acd6e221c5 redbear-power: track D-Bus worker disconnect state 2026-07-07 17:27:52 +03:00
vasilito dc9155a2a8 redbear-power: fix panic hook to restore terminal on panic 2026-07-07 17:22:20 +03:00
Sisyphus Agent 19c7856642 redbear-power: add load average to JSON export
Add a JsonLoad struct with load_avg_1m/5m/15m fields and include it in the --json snapshot. Values are read from app.load_avg. Build, 224 tests, clippy, and fmt clean.
2026-07-07 15:40:56 +03:00
Sisyphus Agent 3452225e0e redbear-power: show live process filter input in keybar
Mirror the local process_filter_input buffer into App so render_keybar can display it. While filtering, the keybar shows "Filter: <buffer>  (N matches)  Enter:apply  Esc:clear  ↑↓:select" in a warm style instead of the normal hints. Build, 224 tests, clippy, and fmt clean.
2026-07-07 15:33:15 +03:00
Sisyphus Agent da8fe50c4a redbear-power: show selected signal + target in kill dialog footer
Replace the generic kill-dialog footer with an explicit confirmation line: "Send SIGTERM to PID 1234 (sshd)?  Enter: send   Esc: cancel   ↑↓: select". Extracts the signal name from the existing signal labels. Build, 224 tests, clippy, and fmt clean.
2026-07-07 15:24:35 +03:00
Sisyphus Agent 022d4ce28b redbear-power: persist refresh interval in session
Add refresh_ms to SessionState (0 = not set, use config/default). Load it into App::poll_ms, give it priority over config when initializing the event-loop poll interval, and save it back in save_session(). Update all SessionState test initializers and assertions. Build, 224 tests, clippy, and fmt clean.
2026-07-07 15:21:25 +03:00
Sisyphus Agent c5b916e062 redbear-power: header uptime and process count
Extend the header load-average line to also show system uptime and total process count. Uptime uses meminfo::format_uptime; process count uses app.processes.count(). All values stay on one line to keep HEADER_LINES at 8. Build, 224 tests, clippy, and fmt clean.
2026-07-07 15:08:40 +03:00
Sisyphus Agent bec5262019 redbear-power: show load average in header
Add a "Load: 0.42 0.55 0.61" line to render_header, color-coded by load versus core count (green <= 50% capacity, yellow <= 100%, red overcommitted). Bump HEADER_LINES from 7 to 8. Build, 224 tests, clippy, and fmt clean.
2026-07-07 14:54:41 +03:00
Sisyphus Agent 5266c3d0ce redbear-power: wire keybinding config into key dispatch
Add KeyBindings::char_for() and replace the 7 hardcoded Key::Char arms in main.rs (quit, cycle_governor, refresh_now, toggle_help, snapshot, benchmark_start, benchmark_stop). Esc remains a quit fallback. All other keys stay hardcoded. Build, 224 tests, clippy, and fmt clean.
2026-07-07 14:05:55 +03:00
Sisyphus Agent b331285661 redbear-power: theme system refactor
Move all palette colors into Theme fields so dark/light/high-contrast/nord/gruvbox/solarized-dark are fully usable. Convert NiceEdit and AffinityEditor to regular render_dialog methods that take a theme. Update all render_* helpers to bind let theme = &app.theme and reference theme fields. All 224 tests pass; clippy and fmt clean.
2026-07-07 13:42:46 +03:00
vasilito 4dc60bdc5d redbear-power: add TIME+ cumulative CPU-time column 2026-07-07 10:39:43 +03:00
vasilito 42c807c55a redbear-power: implement --json export mode 2026-07-07 10:13:12 +03:00
vasilito 7d341b6254 W47: Verify dot-prefix completion resolves against base dir
The existing W39 Tab completion already handles relative paths
(./ and ../) by joining with the active panel's base_dir. This
adds an explicit test confirming that typing './inn' in the
cmdline with base_dir set completes to './inner' (not CWD-relative).

Tests: 1407 pass (was 1406), zero warnings.
2026-07-07 09:16:14 +03:00
vasilito 9e08f7ed05 redbear-power: PID jump, process filter matches PID, narrow process view
- Press F, type a number, Enter: jump cursor directly to that PID in the visible list.
- Press F, type text: filters by process name (existing) and now PID substring too.
- Press h in Process tab: toggle narrow view (PID/STATE/CPU%/MEM/COMM) for small terminals.
- Add process_narrow to App and SessionState; persist across sessions.
- Update help text and status messages to document the new keybindings.
- Fix unused super::* warning in process filter unit tests.
2026-07-07 08:54:59 +03:00
vasilito c5a229a7cd redbear-power: fix all remaining clippy warnings (16→0)
Manual fixes: unnecessary_sort_by→sort_by_key, ptr_arg Vec→slice,
needless_range_loop→iter_mut, question_mark let-else, while_let_loop,
manual_checked_ops, collapsible-if in match arms, identical if-blocks
merged with ||, vec_init_then_push allow on motherboard panel.
Zero behavioral changes. 220 tests pass.
2026-07-07 05:17:46 +03:00
vasilito 6fa762d9e1 redbear-power: auto-fix 84 clippy warnings (100→16)
Mechanical fixes: collapsible-if, is_multiple_of, sort_by_key,
needless borrows, useless format!, manual checked division,
push-after-creation, and other style lints. Zero behavioral
changes. Remaining 16 warnings are pre-existing intentional
patterns (identical if-blocks from match arms, &mut Vec params).
2026-07-07 04:58:45 +03:00
vasilito 58695cc478 redbear-power: fix clippy warnings in affinity.rs
Collapse nested if, replace map_or(false,...) with is_some_and,
use div_ceil instead of manual ceiling division.
2026-07-07 04:52:25 +03:00
vasilito 7ab0af7ab4 redbear-power: persist show_full_cmdline in session state
The C key toggle state now survives app restart via serde-backed
session.toml. Uses #[serde(default)] for backward compatibility
with existing session files.
2026-07-07 03:01:14 +03:00
vasilito a93e9807f0 redbear-power: CPU affinity editor (a key, Process tab)
New affinity.rs module renders a toggleable CPU grid dialog:
- Space toggles selected CPU on/off
- Arrow keys navigate the grid
- Enter applies via sched_setaffinity(2)
- Auto-closes 2s after successful apply
- Shows +N for enabled, -N for disabled CPUs
- Grid adapts to CPU count (4/8/16 columns)

Added set_affinity() to process.rs using libc::sched_setaffinity.
Added 'a' key to keybar and help text.
2026-07-07 02:54:36 +03:00
vasilito b3a249e450 redbear-power: runtime theme cycling with + key
Press + to cycle through all 6 themes (dark, light, high-contrast,
nord, gruvbox, solarized-dark) without restarting. Theme choice
shown via flash_toast. Fixed --theme CLI to accept all 6 modes.
2026-07-07 02:40:54 +03:00
vasilito 75229b0422 redbear-power: organize help text with section dividers, fix theme list
Help now uses ──────── SECTION ──────── dividers for Power & CPU,
Process Management, and Navigation. TOML config theme.mode lists
all 6 themes (nord, gruvbox, solarized-dark were missing).
2026-07-07 02:35:28 +03:00
vasilito 60588bef46 redbear-power: show process state counts in Process panel header
[R:N S:N Z:N T:N] breakdown similar to htop's task summary,
computed from the displayed process list.
2026-07-07 02:30:17 +03:00
vasilito 827fe89872 redbear-power: add RingHistory min/avg methods + SIGSTOP/SIGCONT signals
- RingHistory gains min() and avg() methods with 3 new unit tests (220 total)
- KillDialog adds SIGSTOP (19) and SIGCONT (18) for pause/resume capability
2026-07-07 02:26:29 +03:00
vasilito 91b58cfacc redbear-power: show refresh interval in keybar (e.g. [/]:500ms)
Track current poll_ms in App, update it on all three poll-change paths
([ / ] /Enter), and display it persistently in the keybar between
governor and tab hints.
2026-07-07 02:19:49 +03:00
vasilito babffee80e redbear-power: add system load average (1/5/15 min) to System panel
Reads /proc/loadavg every 4th refresh cycle and displays the three
load average values alongside Cores/AvgFreq/MaxTemp/TotalPkg.
2026-07-07 02:12:50 +03:00
vasilito 2362ea80f1 redbear-power: fix modal clear scope, graph time labels, cmdline toggle
- KillDialog: only clear dialog area, not entire screen (fixes black-screen UX)
- NiceEdit: removed redundant full-screen Clear from main.rs
- All graphs now show x-axis time labels: '-60s' on left, 'now' on right
- Fixed BrailleGraph x-axis label rendering (was truncating to 1 char, now uses set_string)
- Process panel: press 'C' to toggle between comm name and full command line args
- ProcessInfo.cmdline field added (reads /proc/[pid]/cmdline)
- Help text and keybar updated with C keybinding
2026-07-07 02:08:30 +03:00
vasilito f10f3b15b6 redbear-power: CPU frequency color coding in per-CPU table
Freq column now color-graded based on P-state range:
  dark gray  at lowest P-state (<=15% of range)
  default    mid-range
  yellow     >=50% of range
  red+bold   >=85% of range (turbo/high)
2026-07-07 01:50:10 +03:00
vasilito 79e897a628 redbear-power: show process count in tab bar
Tab bar now displays 'Process (42)' with live process count,
giving at-a-glance visibility into how many processes are tracked.
2026-07-07 01:48:00 +03:00
vasilito 59c9ec8ed8 redbear-power: add nord, gruvbox, solarized-dark themes (6 total)
New theme presets selectable via --theme:
  nord           cyan borders, light-blue governor
  gruvbox        green borders, yellow governor
  solarized-dark blue borders, magenta governor

Help text updated with all 6 theme names.
2026-07-07 01:44:06 +03:00
vasilito 763b7110c5 redbear-power: fix process header alignment for MEM% column 2026-07-07 01:41:46 +03:00
vasilito 0285960a56 redbear-power: process state coloring + MEM% display
- STATE column color-coded: R=green, D=red, Z=dark gray, T=yellow (htop-style)
- RSS column now shows memory percentage alongside absolute value: '1.2G (3.4%)'
- Process row spans refactored for per-column styling
2026-07-07 01:40:28 +03:00
vasilito e729e4daec redbear-power: nice value coloring + filter match highlighting
- NI column: green for negative (high priority), yellow for positive (low priority)
- Process filter: matching characters in COMM highlighted BOLD|REVERSED
  when filter is active (bottom/htop-style incremental search visual)
2026-07-07 01:36:00 +03:00
vasilito f9ace4a956 redbear-power: CPU% color grading + context-sensitive keybar
- Process rows: CPU% now color-graded (green <10%, yellow 10-50%, red 50-90%, bright red >90%)
  using styled spans instead of monolithic format string
- Keybar shows context-aware hints: process-specific keys (k/N/l/o/i/F/y) on Process tab,
  power-specific keys (p/P/m/M/t) on other tabs
- [EXPANDED] indicator added to keybar alongside [FROZEN]
2026-07-07 01:30:47 +03:00
vasilito 2061609f62 redbear-power: live graph labels, sort indicator, toast for governor/throttle
- Graph titles now show live values: 'CPU 45%', 'Temp 62°C', 'Pwr 8.3W', etc.
- Process panel shows sort direction arrow (▲ ascending / ▼ descending)
- Governor cycle and throttle mode now trigger flash_toast (floating box)
  instead of flash_status (keybar only)
- BrailleGraph.title changed from &str to String for dynamic titles
2026-07-07 01:26:56 +03:00
vasilito b48410cbf5 redbear-power: stage event.rs deletion + process.rs whitespace cleanup 2026-07-07 01:06:15 +03:00
vasilito d5c8498ac3 redbear-power: add nice editor (N), open files (l), remove dead event.rs, bench auto-stop toast
- nice_edit.rs: modal dialog for adjusting process nice (-20..19), slider visualization
- open_files.rs: reads /proc/[pid]/fd, classifies file descriptors by type
- Removed dead event.rs module (never wired, unused Event enum)
- Benchmark auto-completion: detects elapsed >= duration, calls stop(), flashes toast
- PROCHOT toast trigger wired in app.rs
- Help text updated with N and l keybindings
- 217 tests pass, 0 warnings, 4.1 MB LTO release binary
2026-07-07 01:00:13 +03:00
vasilito f99738d2fb userutils: bump submodule (login diagnostics) + redbear-power/tlc WIP
userutils: commits login/getty diagnostic logging.
redbear-power: toast notification storage + set_nice syscall helper + render WIP.
tlc: cmdline tab-completion improvements.
2026-07-07 00:44:31 +03:00
vasilito af282ee049 redbear-power: add flash_toast API (toast notification storage + active_toast accessor)
Implements the App side of T5 (toast notifications from the bottom/tlc
synthesis). render_toast() overlay can be wired in a follow-up pass.

- App.toast: Option<String> field
- App.toast_expires: Option<Instant> field
- App.flash_toast(msg): sets toast with 3s auto-dismiss
- App.active_toast(): returns &str if not expired

Key bindings: scrollable help dialog (j/k/PgUp/PgDn/Home/G) wired in
the previous round. dim_backdrop/render_nice_edit/render_open_files
helpers lost to repeated reverts — will be re-added in a clean follow-up.
2026-07-07 00:44:30 +03:00