Skip to content

UI rework polish - #2666

Open
toreysoloio wants to merge 3 commits into
kagent-dev:mainfrom
toreysoloio:ui-rework-polish
Open

UI rework polish#2666
toreysoloio wants to merge 3 commits into
kagent-dev:mainfrom
toreysoloio:ui-rework-polish

Conversation

@toreysoloio

Copy link
Copy Markdown
  • Substrate tables now have a unified header design and sort behavior - previously the actor/worker columns had a hand-rolled header to avoid antd default sorting (I assume); instead changed it to use antd's sorting controls while using the custom actor/worker sorter logic
  • Added * markers on required form fields on AgentTemplateForm and ModelForm that were missing it
  • MCP form stops inventing a server name when switching to "command" tab - previously switching would result in the name being set to "tool-server"/"remote-server"

substrate tables being more uniform:
image

agent template /model form inputs being marked required:
image

image

toreysoloio and others added 3 commits September 2, 2026 13:17
Two behaviours the page offered twice, both visible on the same screen.

Row hover is opt-in through `clickable-table-row`, and the rule that suppresses
it everywhere else was written as `tr:hover > td`. The actors and workers tables
are antd `virtual` tables, whose body is divs — no `tr`, no `td` — so those two
went on lighting up under the pointer while the pools and templates beside them,
and every other static table in the app, had stopped. The rule now matches the
cell class antd actually paints the hover from, which exists in both bodies; the
pointer and pressed rules for clickable rows are rewritten the same way so the
mirror bug cannot appear. Selected rows keep their own hover.

The actor and worker columns carried a header of the page's own: a button around
the title, a bare arrow beside it, nothing outside those few words to click. It
avoided antd's `sorter` because a comparator reorders the page in hand, and one
page out of 410,110 reordered is not the cluster sorted. The concern was right
and the remedy left a reader two headers to learn. `sorter: true` is antd's
header with no comparator behind it, so the whole cell is the target, the
chevrons show the direction, and the table still reorders nothing — the order
goes out with the next read.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Torey Scheer <torey.scheer@solo.io>
The agent-template form carried no required marker on any field while
refusing to save without a name and a model configuration, and the model
form's API key was required to create with nothing on screen saying so.

Both marks are conditional, because both fields are. The template form
renders as text on the details page, where an asterisk would be asking a
reader for something the template already has; the model form's API key is
needed to create and not to edit, which its label already says in words and
now says in the marker too.

Every other authoring surface was checked against its own validation rather
than for the presence of marks. The harness, MCP server and prompt forms
already agreed — including the MCP namespace, which is genuinely optional
there and rightly unmarked.

A new spec walks all six surfaces and asserts what is marked *and* what is
not: a test that only checked the marks would pass just as well on a form
that marked every field. It pins the two conditional cases too. `routes` in
the Playwright helper gains the two new-resource addresses it was missing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Torey Scheer <torey.scheer@solo.io>
`suggestName` fell back to `remote-server` or `tool-server` whenever it had
no host or package to derive a name from, and the new-server page re-applies
the suggestion on every field change while the name is untouched. So opening
the wizard and switching to Command wrote `tool-server` into the empty Name
field — as did typing a namespace or flipping TLS, with `remote-server`. What
had been a placeholder became a value the reader appeared to have chosen.

The suggestion is now empty when there is nothing behind it, which is what
the field's placeholder is for. Typing a URL or a package still fills the
name in, and switching kind now clears a suggestion the other branch cannot
support rather than swapping in a made-up one.

Two unit tests cover it: the derivation both kinds already had, and the empty
case that regressed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Torey Scheer <torey.scheer@solo.io>
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