Merge pull request 'Status line: custom segments for fleet bars; slim frank-archon label' (#5) from chore/statusline-custom into main
This commit was merged in pull request #5.
This commit is contained in:
+28
-2
@@ -18,7 +18,7 @@ modelRoles:
|
||||
memory: llamacpp (dankclaw-3090)/frank-zealot:medium
|
||||
symbolPreset: nerd
|
||||
composer:
|
||||
shape: claude
|
||||
shape: band
|
||||
theme:
|
||||
dark: dark-terminal
|
||||
light: light
|
||||
@@ -99,11 +99,37 @@ disabledExtensions:
|
||||
[]
|
||||
statusLine:
|
||||
separator: powerline
|
||||
preset: nerd
|
||||
preset: custom
|
||||
contextLine: embedded
|
||||
transparent: true
|
||||
compactThinkingLevel: true
|
||||
showHookStatus: true
|
||||
sessionAccent: true
|
||||
leftSegments:
|
||||
- session_name
|
||||
- vim
|
||||
- mode
|
||||
- hostname
|
||||
- path
|
||||
- git
|
||||
- pr
|
||||
rightSegments:
|
||||
- model
|
||||
- cost
|
||||
- context_pct
|
||||
- time_spent
|
||||
segmentOptions:
|
||||
model:
|
||||
showThinkingLevel: true
|
||||
path:
|
||||
abbreviate: true
|
||||
stripWorkPrefix: true
|
||||
maxLength: 120
|
||||
git:
|
||||
showBranch: false
|
||||
showStaged: true
|
||||
showUnstaged: true
|
||||
showUntracked: true
|
||||
tui:
|
||||
textSizing: true
|
||||
codexResetFireworks: false
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ providers:
|
||||
# config.yml (192.168.0.143:7771 — frank-zealot's 3090); the
|
||||
# compactionModel candidate keeps the wire model id valid there.
|
||||
compactionModel: llamacpp (dankclaw-3090)/frank-zealot
|
||||
name: "frank-archon (dankserver)"
|
||||
name: "frank-archon"
|
||||
# Dankserver: BOTH Radeon AI PRO R9700s (gfx1201, TP=2 over the
|
||||
# 2026-09-20 board swap's root ports, wht6 wire). Engine:
|
||||
# radiance (StillDeadcode, Apache-2.0) from the digest-pinned
|
||||
|
||||
@@ -11,6 +11,15 @@ timestamp: 2026-08-28
|
||||
|
||||
# Bundle Change Log
|
||||
|
||||
## 2026-10-18 — Status line rebuilt on custom segments; frank-archon display name slimmed
|
||||
|
||||
Interactive tune-up of the omp status bar (grilling session, live loop: config edit → watcher repaint → niri screenshot verify). New knowledge page: [OMP Status Line Customization](/pi/statusline.md).
|
||||
|
||||
* **Mechanics discovered:** `leftSegments`/`rightSegments` are inert unless `preset: custom` (fleet was on `nerd` with dead arrays); `composer.shape` routes them — `band` merges both arrays into one row above the editor (title rides the working row), `claude` splits them into top chip + bottom strip. The `claude` red rule **is** the context meter (length = usage); `contextLine` label variants render in `box`/`band` — `band` paints the labeled inline meter (`60% ——— × 200K`). Working row (`⠿ Working… + tok/s`) is hardcoded — model/thinking can never join it (Tern-only). Eight composer shapes registered in the bundle.
|
||||
* **Final bar (`band`, after a `claude` sojourn):** left = `session_name · vim · mode · hostname · path · git(no branch text) · pr`; right cluster in array order = `model · cost · time_spent` (`context_pct` hoists out of the run to paint the labeled inline meter `60% ——— × 200K` as a flexible spacer between the groups). Cut: tok/s duplicate, clock, cache trio, `context_total`, `subagents`, `session` hash, and `token_in`/`token_out` (cumulative totals live in `/session`). `path`: logical `project/worktree` label (`stripWorkPrefix: true`, kept after a live `false` trial of the full cwd); branch text dropped (worktree branches are autogenerated), dirty badges kept.
|
||||
* **models.yml:** frank-archon display `name` slimmed to `"frank-archon"` (endpoint suffix dropped; `id` untouched).
|
||||
* **Out of scope noted:** worktree name generation (`wt-<date>-<hash>`) is omp-internal; possible upstream feature request.
|
||||
|
||||
## 2026-10-09 — Blankpad DE redesign: desk profiles, keybind rework, Handy fleet wiring
|
||||
|
||||
Branch `blankpad-de-redesign` (worktree `wt/de-redesign-20261009`). Full sweep + redesign of the niri/noctalia/Handy stack on blankpad.
|
||||
|
||||
@@ -8,6 +8,7 @@ two llama.cpp servers (Dankserver, Dankclaw).
|
||||
|
||||
- [Pi Settings System (settings.json)](/core/settings.md) — Main `settings.json` reference. Providers, models, packages, subagent overrides.
|
||||
- [Pi Models Configuration](/pi/models.md) — `models.json` reference. Provider definitions, model specs, endpoints.
|
||||
- [OMP Status Line Customization](/pi/statusline.md) — How presets, composer shapes, and segment arrays actually interact; the fleet's tuned bar.
|
||||
|
||||
## Extensions
|
||||
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
type: reference
|
||||
title: OMP Status Line Customization
|
||||
description: How the omp status line actually works — presets vs custom arrays, composer-shape segment routing, the context meter, and the fleet's tuned segment layout.
|
||||
tags:
|
||||
- omp
|
||||
- tui
|
||||
- statusline
|
||||
- config
|
||||
timestamp: 2026-10-18
|
||||
---
|
||||
|
||||
# OMP Status Line Customization
|
||||
|
||||
Ground truth from the installed bundle (`@oh-my-pi/pi-coding-agent/dist/cli.js`)
|
||||
verified live on blankpad 2026-10-18. All knobs live in
|
||||
`agent/config.yml` under `statusLine:` (tracked — see
|
||||
[Command Center repo](../core/index.md)); the file is file-watched, so edits
|
||||
repaint a running session without restart (verify visually: niri screenshot,
|
||||
see [niri capture recipe](../system/index.md)).
|
||||
|
||||
## Preset vs custom — the trap
|
||||
|
||||
`statusLine.preset` ships whole configurations (`default`, `minimal`,
|
||||
`compact`, `full`, `nerd`, `ascii`, `custom`). **`leftSegments` /
|
||||
`rightSegments` / `segmentOptions` are only read when `preset: custom`** —
|
||||
with any named preset they are silently ignored. The fleet config runs
|
||||
`preset: custom`.
|
||||
|
||||
## Composer shape routes the segments
|
||||
|
||||
`composer.shape` decides *where* the two segment arrays render:
|
||||
|
||||
| shape | leftSegments | rightSegments |
|
||||
|---|---|---|
|
||||
| `band` (fleet) | merged single row above editor | same row, right side (title skipped — it rides the working row) |
|
||||
| `claude` | bottom strip, left-aligned | top rule chip, right-aligned |
|
||||
| `rule` | same as claude, gap above strip | same |
|
||||
| `box` | box top border | box top border |
|
||||
| `borderless` / `pi` / `field` / `rail` | single bottom bar | single bottom bar |
|
||||
|
||||
The `⠿ Working…` row is hardcoded: shimmer text + `composer.tokenRate` readout
|
||||
(+ session title in `band` only). Model/thinking-level can never join it
|
||||
despite the settings description — that composer-bar behavior is Tern-only.
|
||||
|
||||
## Segment universe (27)
|
||||
|
||||
`pi`, `status`, `model`, `mode`, `path`, `git`, `pr`, `subagents`,
|
||||
`token_in`, `token_out`, `token_total`, `token_rate`, `cost`, `context_pct`,
|
||||
`context_total`, `time_spent`, `time`, `session`, `hostname`, `cache_read`,
|
||||
`cache_write`, `cache_hit`, `session_name`, `usage`, `collab`, `stream`, `vim`.
|
||||
|
||||
Conditional segments render nothing until their trigger exists: `vim` needs
|
||||
`tui.vimMode`, `mode` needs plan/yolo, `pr` needs an associated PR, `git` shows
|
||||
staged/unstaged/untracked badges (branch text optional via
|
||||
`segmentOptions.git.showBranch`), `status` needs an extension push.
|
||||
`session` = first 8 chars of the session id (resume-by-id handle).
|
||||
|
||||
## The context meter
|
||||
|
||||
In the `band` shape (fleet) the meter is the labeled inline line between the
|
||||
segment groups (`60% ———— × 200K`). In the `claude` shape the red rule left of
|
||||
the right-segment chip **is** the meter: its length tracks context usage.
|
||||
`statusLine.contextLine` (`off` / `percentage` / `annotated` / `embedded`)
|
||||
only changes rendering in `box`/`band` — in `claude` all non-`off` values
|
||||
look identical. Docs' claim that contextLine is "box composer only" is
|
||||
wrong for the meter itself; the labeled inline variant is the box/band-only
|
||||
part.
|
||||
|
||||
## Path segment and `stripWorkPrefix`
|
||||
|
||||
`segmentOptions.path.stripWorkPrefix` (default **true** — the code tests
|
||||
`!== false`) gates two behaviors in the `path` renderer:
|
||||
|
||||
1. **Worktree sessions:** `true` never shows the disk path — it renders the
|
||||
logical `projectName/worktreeName` label (bare `projectName` when the
|
||||
current branch is named after the worktree) with the worktree glyph.
|
||||
`false` opts out and shows the real cwd with a folder glyph, plus a
|
||||
` ↳ relativeRepoRoot` suffix inside a repo. Base-directory-only is not
|
||||
renderable in either mode.
|
||||
2. **All sessions:** `true` uses the pretty display path (scratch sessions
|
||||
get the scratch-folder icon); `false` uses the raw absolute cwd.
|
||||
|
||||
`abbreviate` and `maxLength` (clip, default 40) apply afterwards in both
|
||||
modes. The fleet runs `true` — logical label, worktree glyph (verified live
|
||||
2026-10-18; an earlier trial of `false` for the full cwd was rejected by eye).
|
||||
|
||||
## Fleet configuration (2026-10-18)
|
||||
|
||||
- Shape `band`: one merged status row. Left group: `session_name`, `vim`,
|
||||
`mode`, `hostname`, `path`, `git` (no branch text — worktree branches are
|
||||
autogenerated names), `pr`. Right group (array order = paint order, so the
|
||||
last entry hugs the screen edge): `model`, `cost`, `context_pct`,
|
||||
`time_spent` — `context_pct` hoists out of the run to paint the labeled
|
||||
inline meter (`60% ——— × 200K`) as a flexible spacer between the groups.
|
||||
`session_name` renders on the working row, not the status row.
|
||||
- Deliberately cut: `token_rate` (lives on the working row), `time` (panel
|
||||
clock), `cache_*` (noise), `context_total` (implied by the meter),
|
||||
`subagents`, `session`, `token_in`/`token_out` (cumulative totals are
|
||||
in `/session` anyway).
|
||||
- Model display names slimmed in `models.yml` (`frank-archon`, no endpoint
|
||||
suffix); `name:` is free-form display, `id:` is the wiring — renaming ids is
|
||||
the cutover procedure, see [Pi Models](/pi/models.md).
|
||||
Reference in New Issue
Block a user