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