import type { ProviderAccount } from '@runtime/lib/providers'; import { DEFAULT_AGENT_ID, DEFAULT_MAIN_SESSION_SUFFIX, buildMainSessionKey, normalizeAgentId, type AgentSummary, } from '@runtime/lib/agents'; import type { HostApiContext } from '../context'; import type { NormalizedHostApiRequest } from '../route-utils'; import { ok } from '../route-utils'; function formatModelDisplay(modelRef: string | null | undefined, fallbackLabel: string): string { const trimmed = String(modelRef ?? '').trim(); if (!trimmed) return fallbackLabel; const parts = trimmed.split('/'); return parts[parts.length - 1] || trimmed; } function buildMainAgent(defaultAccount: ProviderAccount | null): AgentSummary { return { id: DEFAULT_AGENT_ID, name: 'Main Agent', isDefault: true, providerAccountId: defaultAccount?.id ?? null, modelRef: defaultAccount?.model ?? null, modelDisplay: formatModelDisplay(defaultAccount?.model, defaultAccount?.label || 'Unassigned'), mainSessionKey: buildMainSessionKey(DEFAULT_AGENT_ID, DEFAULT_MAIN_SESSION_SUFFIX), vendorId: defaultAccount?.vendorId ?? null, source: 'synthetic-main', }; } function buildProviderBackedAgents(accounts: ProviderAccount[]): AgentSummary[] { const seen = new Set(); const summaries: AgentSummary[] = []; for (const account of accounts) { const agentId = normalizeAgentId(account.id); if (seen.has(agentId) || agentId === DEFAULT_AGENT_ID) continue; seen.add(agentId); summaries.push({ id: agentId, name: account.label || agentId, isDefault: false, providerAccountId: account.id, modelRef: account.model ?? null, modelDisplay: formatModelDisplay(account.model, account.label || agentId), mainSessionKey: buildMainSessionKey(agentId, DEFAULT_MAIN_SESSION_SUFFIX), vendorId: account.vendorId, source: 'provider-account', }); } return summaries; } export async function handleAgentRoutes( request: NormalizedHostApiRequest, ctx: HostApiContext, ) { const { pathname, method } = request; if (pathname !== '/api/agents' || method !== 'GET') { return null; } const accounts = ctx.providerApiService .getAccounts() .filter((account) => account.enabled !== false); const defaultAccountId = ctx.providerApiService.getDefault().accountId; const defaultAccount = accounts.find((account) => account.id === defaultAccountId) ?? accounts[0] ?? null; const agents = [ buildMainAgent(defaultAccount), ...buildProviderBackedAgents(accounts), ]; return ok({ success: true, agents, defaultAgentId: DEFAULT_AGENT_ID, defaultProviderAccountId: defaultAccount?.id ?? null, defaultModelRef: defaultAccount?.model ?? null, mainSessionSuffix: DEFAULT_MAIN_SESSION_SUFFIX, configuredChannelTypes: [], channelOwners: {}, channelAccountOwners: {}, }); }