Skip to content

feat: polish OpenPI UI and stabilize delegate tools - #52

Merged
tt-a1i merged 3 commits into
mainfrom
codex/ui-polish-latest
Aug 22, 2026
Merged

feat: polish OpenPI UI and stabilize delegate tools#52
tt-a1i merged 3 commits into
mainfrom
codex/ui-polish-latest

Conversation

@tt-a1i

@tt-a1i tt-a1i commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • unify Tasks, Subagents, Sessions, Workflows, Git and Ask User screens around one shared terminal chrome vocabulary
  • make navigation, borders, focus states and compact rows consistent across OpenPI management surfaces
  • expose the complete six-tool delegate family in one capability load, keeping the model-facing tool schema stable across spawn, settle and cancel
  • keep empty and unknown subagent lifecycle operations explicit and fail-closed

Why

OpenPI should progressively disclose tools at capability boundaries, not at short-lived resource-state boundaries. Once delegate is loaded, spawning the first subagent should not trigger a second tool-schema change and another avoidable cache rewrite.

Validation

  • bun run check — passed (existing Effect typecheck warnings only)
  • bun run test — 752 Node tests passed, 29 Vitest tests passed
  • branch is based directly on current origin/main with 3 scoped commits

Manual verification

The local Pi development runtime is installed from this branch. A final /reload smoke should confirm the new visual treatment and that spawning after loading delegate does not expand the active tool set again.

tt-a1i added 3 commits August 22, 2026 09:59
Three full-screen views had each grown their own copy of the same chrome
and drifted apart in the details you notice without being able to name:
one framed the body in `border`, another in `borderMuted`; one wrote
`... 3 more`, another `… 3 more`; hints were a single dim run in which the
keys you are meant to press read exactly as faint as the prose describing
them.

extensions/shared/screen-chrome.ts owns that vocabulary now —
screenTitleLine, panelFrame, hintLine, overflowNote — and /subagents,
/ps, /workflows, /tasks, the changed-files view, the sessions picker and
ask-user all render through it. Keys read a step brighter than their
labels, pre-styled labels are passed through instead of repainted, and
every added hint row is paid for out of the body so no overlay grew.

Quieter status colour below the editor: renderNavigationMetrics paints the
metrics tail muted while a run is healthy and borrows the status colour
only for the one count that carries a settled outcome. The tasks census
drops its bold/dim zebra and its always-zero segments for colour-coded
chips (`4 tasks · 3 done · 1 in progress`), and one STATUS_COLOR map ends
the widget/list disagreement over what colour in-progress work is.

Migrated onto 0.3.1 rather than over it: the subagent dashboard keeps
upstream's content-fit height, spinner, activity labels and metadata
shedding, and the takeover view keeps its three-rule chrome; only the
frame and the hint styling come from the shared module.
The session picker was the last place still painting frames with `border`
while its own split-pane frame, the scrollbar's neighbours, and every other
OpenPI panel had moved to `borderMuted` — so the compact picker's outer
frame and the preview scrollbar read a shade louder than the pane they
belong to. A token inventory found these four call sites were the only
`border` uses left in the package.
@tt-a1i
tt-a1i merged commit 39145c3 into main Aug 22, 2026
4 checks passed
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