SIGN IN SIGN UP

feat(web): group agents by herdr's real workspaces and tabs

The list reverse-derived the hierarchy from the agents it could see: it named each space
after the basename of some pane's cwd (the herdr-remote space showed up as "relay"),
numbered tabs by the order agents happened to appear in, and could not show a space at all
unless an agent was sitting in it. It now renders the `spaces` the relay sends -- the
operator's own labels and numbering, the space and tab herdr itself has focused, and the
total pane count, so a space holding only shell panes says "3 panes here, none running an
agent" instead of being invisible.

The actions that go with the hierarchy are wired to the messages that now exist: `focus`
for a pane, a tab or a space; `rename_tab` and `close_tab`, which the context menu sent to
nobody and which that menu could not even open in the multi-workspace view; and renaming an
agent through `rename_agent` rather than typing `/rename <name>` into claude's composer.

Attribute values in the agent list are escaped for quotes, which escapeHtml does not do --
a name renameable from this very UI was being interpolated into aria-label and data-*.
N
Nick007 committed
a157eecfa06655e7c57150ad6e78b6c0ae62e92d
Parent: e90d0e0