fix(panel): orchestrator status reflects reachability; drop CEO from the agent roster

- The Orchestrator card showed red 'Stopped' whenever zero agents were
  running, even though the service was healthy (it read total_agents > 0).
  Base Running/Stopped on whether the status query resolves; agent count is
  already shown in its own card.
- The human CEO leaked into the Board agent grid (its record carries
  team=board). Exclude the ceo role from getBoardAgents — the CEO is the
  operator, not a spawnable agent.
This commit is contained in:
Renn F
2026-06-11 23:30:46 +02:00
parent bd64f62637
commit ec790d18b5
2 changed files with 11 additions and 5 deletions
@@ -14,7 +14,10 @@ export function OrchestratorStatusCards({ status, isLoading }: OrchestratorStatu
const runningCount = status?.by_state?.running || 0;
const readyCount = status?.by_state?.ready || 0;
const activeCount = runningCount + readyCount;
const isRunning = status && status.total_agents > 0;
// The orchestrator service is up whenever its status query resolves — agent
// count is shown separately in the cards below. (Previously this read
// `total_agents > 0`, so an idle-but-healthy orchestrator showed "Stopped".)
const isRunning = status !== undefined;
return (
<div className="grid gap-4 md:grid-cols-4">
+7 -4
View File
@@ -21,10 +21,13 @@ export interface AgentDefinition {
export const getBoardAgents = (agents: AgentDefinition[] | undefined | null) =>
(agents ?? []).filter(
(a) =>
a.team === Team.BOARD ||
a.role === AgentRole.HEAD_MARKETING ||
a.role === AgentRole.AUDITOR ||
a.role === AgentRole.PRODUCT_OWNER
// The CEO is the human operator, not a spawnable agent — exclude it even
// though its record carries team=board.
a.role !== AgentRole.CEO &&
(a.team === Team.BOARD ||
a.role === AgentRole.HEAD_MARKETING ||
a.role === AgentRole.AUDITOR ||
a.role === AgentRole.PRODUCT_OWNER)
);
export const getMainPm = (agents: AgentDefinition[] | undefined | null) =>