Skip to content

Make the bottom dock a real panel - #65

Merged
rajanbor merged 1 commit into
mainfrom
feat/terminal-panel
Sep 16, 2026
Merged

rajanbor merged 1 commit into
mainfrom
feat/terminal-panel

Conversation

@rajanbor

Copy link
Copy Markdown
Owner

Change

The bottom dock was a list of lines under a thin strip. The sandbox owning a pane was legible only from the tab's name, the policy banner reprinted above every render, the input sat in a bar detached from its own output, and there was no way to make it bigger.

It is a panel now:

  • Three tabsProblems, Output, Terminal — underlined rather than boxed, with actions on the right.
  • Sessions down the side in the terminal tab, each naming its sandbox and state, so the tab strip stops carrying it.
  • The policy stated once, at the head of that session's log, with its shell and working directory.
  • The prompt inside the stream, as the last line, which is how a shell actually reads. Clicking anywhere in the stream focuses it.
  • Maximise and restore, plus clear, split and new — the last two reporting the reason they cannot run.

Maximised, the panel turns opaque (--bg-sidebar): with the panel material alone you could read the view through it, which is not a panel.

Problems and Output are not placeholders

Problems gathers what the snapshot already says is broken, and every row names the path it was read from:

Source What it reports
models/* not ready to answer, with the reason and the requirement
providers/* not connected
library/skills/* a permission the skill does not have
library/mcp/* blocked or otherwise not connected, with its scopes
sandboxes/* no account of its own — the account boundary would refuse it
capabilities/modules/* planned rather than built

Errors first, then warnings, then what is merely worth knowing. lib/problems.ts derives it; nothing is invented.

Output keeps every refusal and reason this window reported, after the toast carrying it has gone — in memory only, and the tab says durable logs belong to the daemon.

Validation

  • pnpm build (style check, Next build, TypeScript) clean.
  • In the browser: ⌘J opened the panel, the tallies read 2 · 3 · 7 for problems and 2 for terminals; switched tabs; maximised and restored; confirmed the maximised panel is opaque in light and dark; ran help and a refused command in a session and watched the prompt stay at the end of the stream.

Security impact

None. It reports refusals that already existed, and it still refuses every command that would need a live pty — a new terminal and a split terminal report the same reason.

Closes #63.

It was a list of lines under a thin strip: the sandbox owning each pane was
only legible from the tab's name, the policy banner reprinted above every
render, the input sat in a bar detached from its own output, and there was no
way to make the thing bigger.

Now it is a panel with three tabs, actions on the right, and — in Terminal —
the sessions down the side, each naming its sandbox and state. The policy is
stated once, at the head of that session's log, and the prompt is the last line
of the stream rather than a bar beneath it, which is how a shell actually
reads. The panel maximises to fill the work area and restores to the height it
had; maximised it turns opaque, because a panel you can read the view through
is not a panel.

Problems and Output are not placeholders.

Problems gathers what the snapshot already says is broken and names the path
each row came from: models that are not ready, providers that are not
connected, skills whose permission is missing, servers that are blocked,
sandboxes with no account of their own, engine modules that are planned rather
than built. Errors first, then warnings, then what is merely worth knowing.
`lib/problems.ts` derives it; nothing there is invented.

Output keeps every refusal and reason this window reported, after the toast
carrying it has gone — held in memory only, and the tab says that durable logs
belong to the daemon.

A new terminal and a split terminal report the same reason they always did: a
live pty runs as the sandbox user and needs workbenchd.

Closes #63
@rajanbor
rajanbor merged commit 11d2444 into main Sep 16, 2026
11 checks passed
@rajanbor
rajanbor deleted the feat/terminal-panel branch September 16, 2026 12:01
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.

Terminal: make the bottom panel a real panel

1 participant