feat(#1014): rename manager agent root→ruth across all crates + frontend
This commit is contained in:
parent
0c5760b0da
commit
89665b94de
19 changed files with 71 additions and 166 deletions
|
|
@ -264,10 +264,8 @@ import {
|
|||
function knownAgents() {
|
||||
// Read live from the flow-local containers cache so newly-spawned
|
||||
// agents become addressable without a manual reload.
|
||||
// Broker uses the literal recipient `manager` for the manager's
|
||||
// inbox, not the container name `hm1nd`.
|
||||
const names = Array.from(flowContainers.values())
|
||||
.map((c) => (c.is_manager ? 'manager' : c.name));
|
||||
.map((c) => c.name);
|
||||
// `*` fans out to every registered agent (server-side
|
||||
// broadcast_send).
|
||||
names.unshift('*');
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ window.marked = marked;
|
|||
menuItem('↻ R3BU1LD', { action: '/rebuild/', confirm: `rebuild ${c.name}? hot-reloads the container.` }),
|
||||
);
|
||||
|
||||
if (!c.is_manager) {
|
||||
{
|
||||
dropdown.append(
|
||||
menuSep(),
|
||||
menuItem('DESTR0Y', {
|
||||
|
|
@ -707,8 +707,6 @@ window.marked = marked;
|
|||
const head = el('div', { class: 'head' });
|
||||
head.append(
|
||||
el('a', { class: 'name', href: url, target: '_blank', rel: 'noopener' }, c.name),
|
||||
el('span', { class: c.is_manager ? 'role role-m1nd' : 'role role-ag3nt' },
|
||||
c.is_manager ? 'm1nd' : 'ag3nt'),
|
||||
);
|
||||
// Icon-only nav strip — populated async from `/api/agent/{name}/links`,
|
||||
// a same-origin proxy that forwards the agent backend's own link list
|
||||
|
|
@ -886,11 +884,9 @@ window.marked = marked;
|
|||
actions.replaceChildren();
|
||||
const allRunning = selected.every((c) => c.running);
|
||||
const allStopped = selected.every((c) => !c.running);
|
||||
const noManagers = selected.every((c) => !c.is_manager);
|
||||
|
||||
const stoppedNames = selected.filter((c) => !c.running).map((c) => c.name);
|
||||
const runningNames = selected.filter((c) => c.running).map((c) => c.name);
|
||||
const managerNames = selected.filter((c) => c.is_manager).map((c) => c.name);
|
||||
|
||||
function why(label, blockers) {
|
||||
if (!blockers.length) return null;
|
||||
|
|
@ -916,21 +912,14 @@ window.marked = marked;
|
|||
action: '/rebuild/',
|
||||
confirm: (names) => `rebuild ${names.length} agent${names.length === 1 ? '' : 's'} (${names.join(', ')})? hot-reloads each container.`,
|
||||
});
|
||||
// DESTR0Y / PURG3: sub-agents only (manager has its own
|
||||
// `refusing to destroy` guard at the host layer). When the
|
||||
// selection includes the manager, both buttons go disabled with a
|
||||
// clear reason rather than letting the operator submit and eat a
|
||||
// 500.
|
||||
addBulkButton(actions, 'btn-destroy', 'DESTR0Y', noManagers, selected, {
|
||||
addBulkButton(actions, 'btn-destroy', 'DESTR0Y', true, selected, {
|
||||
action: '/destroy/',
|
||||
confirm: (names) => `destroy ${names.length} agent${names.length === 1 ? '' : 's'} (${names.join(', ')})? containers are removed; state + creds kept.`,
|
||||
disabledTitle: why('DESTR0Y', managerNames.map((n) => `\`${n}\` is the manager`)),
|
||||
});
|
||||
addBulkButton(actions, 'btn-destroy', 'PURG3', noManagers, selected, {
|
||||
addBulkButton(actions, 'btn-destroy', 'PURG3', true, selected, {
|
||||
action: '/destroy/',
|
||||
body: { purge: 'on' },
|
||||
confirm: (names) => `PURGE ${names.length} agent${names.length === 1 ? '' : 's'} (${names.join(', ')})? containers, config history, claude creds, and notes are all WIPED. no undo.`,
|
||||
disabledTitle: why('PURG3', managerNames.map((n) => `\`${n}\` is the manager`)),
|
||||
});
|
||||
|
||||
// Move agent(s) in the topology tree — selecting an option in the
|
||||
|
|
@ -2588,8 +2577,7 @@ window.marked = marked;
|
|||
// ready to append to the form.
|
||||
function buildTargetChips({ idPrefix, fieldName, checked, extraNames = [] }) {
|
||||
// Derive the manager's actual name from live state rather than
|
||||
// hardcoding it — the manager's container name may differ from the
|
||||
// logical label the broker uses (e.g. "root" after the rename).
|
||||
// hardcoding it — surface it first so it always appears before agents.
|
||||
const managerContainer = Array.from(containersState.values()).find((c) => c.is_manager);
|
||||
const managerName = managerContainer?.name;
|
||||
const candidates = ['operator'];
|
||||
|
|
|
|||
Loading…
Reference in a new issue