fix: show bridge in agents page, replace capabilities with labels

This commit is contained in:
Markov 2026-03-15 14:14:30 +01:00
parent c00a3ea1f1
commit 503bb1379a

View File

@ -12,7 +12,7 @@ export default function AgentsPage() {
const load = async () => { const load = async () => {
try { try {
const members = await getMembers(); const members = await getMembers();
setAgents(members.filter((m) => m.type === "agent")); setAgents(members.filter((m) => m.type === "agent" || m.type === "bridge"));
} finally { } finally {
setLoading(false); setLoading(false);
} }
@ -22,6 +22,11 @@ export default function AgentsPage() {
load(); load();
}, []); }, []);
const typeIcon = (type: string) => {
if (type === "bridge") return { bg: "bg-purple-500/20", text: "text-purple-400", icon: "🔗" };
return { bg: "bg-blue-500/20", text: "text-blue-400", icon: "🤖" };
};
return ( return (
<div className="p-6"> <div className="p-6">
<div className="flex items-center justify-between mb-6"> <div className="flex items-center justify-between mb-6">
@ -40,45 +45,56 @@ export default function AgentsPage() {
<div className="text-[var(--muted)] text-sm">Нет агентов</div> <div className="text-[var(--muted)] text-sm">Нет агентов</div>
) : ( ) : (
<div className="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-3"> <div className="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
{agents.map((agent) => ( {agents.map((agent) => {
<div const ti = typeIcon(agent.type);
key={agent.id} return (
onClick={() => setSelected(agent)} <div
className="bg-[var(--card)] border border-[var(--border)] rounded-xl p-4 cursor-pointer hover:border-[var(--accent)]/50 transition-colors" key={agent.id}
> onClick={() => setSelected(agent)}
<div className="flex items-center justify-between mb-2"> className="bg-[var(--card)] border border-[var(--border)] rounded-xl p-4 cursor-pointer hover:border-[var(--accent)]/50 transition-colors"
<h3 className="font-semibold">{agent.name}</h3> >
<span <div className="flex items-center justify-between mb-2">
className={`text-xs px-2 py-0.5 rounded-full ${ <div className="flex items-center gap-2">
agent.status === "online" <span>{ti.icon}</span>
? "bg-green-500/20 text-green-400" <h3 className="font-semibold">{agent.name}</h3>
: "bg-gray-500/20 text-gray-400" </div>
}`} <span
> className={`text-xs px-2 py-0.5 rounded-full ${
{agent.status === "online" ? "online" : "offline"} agent.status === "online"
</span> ? "bg-green-500/20 text-green-400"
</div> : "bg-gray-500/20 text-gray-400"
<div className="text-xs text-[var(--muted)] mb-3">@{agent.slug}</div> }`}
>
{agent.agent_config?.capabilities && agent.agent_config.capabilities.length > 0 && ( {agent.status === "online" ? "online" : "offline"}
<div className="flex flex-wrap gap-1 mb-3"> </span>
{agent.agent_config.capabilities.map((cap) => ( </div>
<span <div className="text-xs text-[var(--muted)] mb-3">
key={cap} @{agent.slug} {agent.type}
className="text-xs px-2 py-0.5 bg-[var(--accent)]/10 text-[var(--accent)] rounded"
>
{cap}
</span>
))}
</div> </div>
)}
<div className="text-xs text-[var(--muted)] space-y-1"> {agent.agent_config?.labels && agent.agent_config.labels.length > 0 && (
<div>💬 chat: {agent.agent_config?.chat_listen || "—"}</div> <div className="flex flex-wrap gap-1 mb-3">
<div>📋 tasks: {agent.agent_config?.task_listen || "—"}</div> {agent.agent_config.labels.map((label) => (
<span
key={label}
className="text-xs px-2 py-0.5 bg-[var(--accent)]/10 text-[var(--accent)] rounded"
>
{label}
</span>
))}
</div>
)}
<div className="text-xs text-[var(--muted)] space-y-1">
<div>💬 чат: {agent.agent_config?.chat_listen || "—"}</div>
<div>📋 задачи: {agent.agent_config?.task_listen || "—"}</div>
{agent.agent_config?.mentionable === false && (
<div>🚫 не упоминаемый</div>
)}
</div>
</div> </div>
</div> );
))} })}
</div> </div>
)} )}