fabro/docs/public/images
Bryan Helmkamp 40ed64c1c2
Add system resources settings page (#328)
## Summary

Adds server-visible resource reporting and a compact Resources settings
tab for CPU, memory, and the filesystem that contains Fabro storage.

## Changes

- Adds `GET /api/v1/system/resources` backed by `sysinfo`, including CPU
sampling, cgroup-aware memory reporting, storage filesystem matching,
and Fabro-managed disk byte totals.
- Extends the OpenAPI contract and regenerates the Rust and TypeScript
API clients.
- Adds a deterministic demo-mode resources route.
- Adds `/settings/resources` with 5 second polling and panels for
overview, CPU, memory, disk, and notes.
- Adds server integration/unit coverage and web route/render coverage.

## Screenshot

![Resources settings
page](https://raw.githubusercontent.com/fabro-sh/fabro/feature/system-resources-settings/docs/public/images/web/settings-resources.jpg)

## Verification

- `cargo build -p fabro-api`
- `cd lib/packages/fabro-api-client && bun run generate`
- `cargo nextest run -p fabro-server --features test-support --test it
api::system`
- `cargo test -p fabro-server resource_sampler::tests`
- `cd apps/fabro-web && bun test`
- `cd apps/fabro-web && bun run typecheck`
- `cd apps/fabro-web && bun run build`
- `cargo +nightly-2026-04-14 fmt --check --all`
- `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D
warnings`

---

[![Compound
Engineering](https://img.shields.io/badge/Compound%20Engineering-Codex-6f42c1)](https://github.com/compound-engineering)

🤖 Generated with GPT-5 via [Codex](https://openai.com/codex)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 17:22:53 -04:00
..
web Add system resources settings page (#328) 2026-05-20 17:22:53 -04:00
anatomy-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
branch-loop-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
brave-search-research.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
ensemble-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-clone-substack.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-dod-multimodel.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-dod.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-repl-handoff.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-semantic-port.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
example-solitaire.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
hero-dark.png refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
hero-light.png refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
how-fabro-works.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
nlspec-conformance.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
parallel-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
permission-flow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
plan-implement-readme.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
plan-implement-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
preview-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
run-detail.png refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
runs-board.png refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-branch-loop.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-ensemble.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-hello.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-multi-model.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-parallel-review.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-plan-implement.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-sub-workflow-child.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-sub-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-subagent.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
tutorial-tool-use.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
vnc-access-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
vpn-connections-workflow.svg refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00
workflow-example.png refactor(docs): split docs/ into public/ and internal/ 2026-04-27 07:21:13 -07:00