diff --git a/docs/web-ui.md b/docs/web-ui.md index ec734dfd..a4a39df6 100644 --- a/docs/web-ui.md +++ b/docs/web-ui.md @@ -440,6 +440,16 @@ frosted-mauve bar slides up from the bottom of the viewport - `▶ ST4RT` — stopped agents only - `↻ R3BU1LD` — always available - `DESTR0Y` / `PURG3` — sub-agents only (disabled if manager selected) + - `⇡ M0V3 → ROOT` (#486) — promote selected agents to top-level + (parent = null); disabled when all selected are already at root + or when the selection includes the manager. + - `⇢ M0V3 → [select]` (#486) — single-agent-only inline picker; + the dropdown lists every container that isn't the target itself + nor a descendant of it (client-side cycle prevention; the + backend's `topology::set_parent` re-checks). On submit POSTs to + `/api/topology/set-parent` (form-encoded `child=&new_parent=`), + which writes `topology.json` and re-emits a container snapshot so + the tree repaints without a page reload. - **`✕ clear`** button + `Esc` key clear the entire selection. Stale selections (agents destroyed while selected) are pruned on diff --git a/frontend/packages/dashboard/src/dashboard.css b/frontend/packages/dashboard/src/dashboard.css index 08150b4a..20260a0e 100644 --- a/frontend/packages/dashboard/src/dashboard.css +++ b/frontend/packages/dashboard/src/dashboard.css @@ -915,6 +915,11 @@ ul form.inline { display: inline-block; } .btn-restart { color: var(--cyan); border-color: var(--cyan); font-size: 0.75em; padding: 0.15em 0.5em; margin-left: 0.6em; } .btn-stop { color: var(--pink); border-color: var(--pink); font-size: 0.75em; padding: 0.15em 0.5em; margin-left: 0.6em; } .btn-start { color: var(--green); border-color: var(--green); font-size: 0.75em; padding: 0.15em 0.5em; margin-left: 0.6em; } +/* #486 — M0V3 affordance (selection bar). Mauve picks up the same + accent the question-override / mid-status surfaces use; reads as + "structural change" rather than the destructive red / amber chrome + of destroy / rebuild. */ +.btn-move { color: var(--mauve); border-color: var(--mauve); font-size: 0.75em; padding: 0.15em 0.5em; margin-left: 0.6em; } .btn-talk { color: var(--cyan); border-color: var(--cyan); } .btn-spawn { color: var(--amber); border-color: var(--amber); } .btn-fire-now { color: var(--mauve, #cba6f7); border-color: var(--mauve, #cba6f7); } @@ -2085,3 +2090,32 @@ body.flow-shell .tabbar .tab.active.tab-link { visible (`body.has-selection`, toggled by tabs.js when the selection set is non-empty). */ body.dashboard-shell.has-selection { padding-bottom: 4.5em; } + +/* #486 — M0V3 → picker. Inline `