@acarmisc/backstage-plugin-ai-agents 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/types.ts", "../src/api.ts", "../src/hooks/useAgents.ts", "../src/components/AgentFilters.tsx", "../src/components/AgentAvatar.tsx", "../src/components/AgentStatusBadge.tsx", "../src/components/AgentCapabilities.tsx", "../src/components/RuntimeBadge.tsx", "../src/components/BillingBadge.tsx", "../src/components/AgentCard.tsx", "../src/components/AgentsGrid.tsx", "../src/components/AgentDetailDrawer.tsx", "../src/components/AgentsPage.tsx", "../src/index.ts", "../src/plugin.tsx"],
4
+ "sourcesContent": ["import { Entity } from '@backstage/catalog-model';\n\n/** Value of `spec.type` that marks a catalog Component as an AI agent. */\nexport const AI_AGENT_TYPE = 'ai-agent';\n\n/** Annotation namespace for agent-specific fields on a catalog entity. */\nexport const AI_AGENT_ANNOTATION_PREFIX = 'ai-agent.acarmisc.org';\n\nexport type AgentRuntimeName =\n | 'bedrock-agentcore'\n | 'litellm'\n | 'lambda'\n | 'custom'\n | string;\n\nexport interface AgentRuntimeInfo {\n /** Runtime identifier, e.g. \"bedrock-agentcore\", \"litellm\", \"lambda\", \"custom\". */\n runtime: AgentRuntimeName;\n /** Opaque handle/ARN/identifier the backend uses to probe the agent. */\n runtimeHandle?: string;\n /** Public invocation endpoint, if any. */\n endpoint?: string;\n /** Health-check URL the backend can call. */\n healthUrl?: string;\n}\n\nexport type AgentBillingModel =\n | 'per-invocation'\n | 'per-token'\n | 'subscription'\n | 'free'\n | string;\n\nexport interface AgentBilling {\n model: AgentBillingModel;\n /** Cost per 1000 invocations (per-invocation) or per 1M tokens (per-token). */\n unitCost?: number;\n /** Monthly spend cap if known. */\n budget?: number;\n}\n\nexport type AgentCapabilityCategory =\n | 'reasoning'\n | 'retrieval'\n | 'tools'\n | 'vision'\n | 'voice'\n | 'data'\n | 'safety';\n\nexport interface AgentCapability {\n label: string;\n category?: AgentCapabilityCategory;\n}\n\nexport type AgentStatusState = 'healthy' | 'degraded' | 'down' | 'unknown';\n\nexport interface AgentStatus {\n state: AgentStatusState;\n lastChecked?: string;\n latencyMs?: number;\n message?: string;\n}\n\nexport interface AiAgent {\n /** Backstage entity ref, e.g. \"component:default/support-triage-agent\". */\n entityRef: string;\n name: string;\n title?: string;\n description?: string;\n avatarUrl?: string;\n owner?: string;\n system?: string;\n lifecycle?: string;\n version?: string;\n /** Human-readable purpose (defaults to description when no dedicated field). */\n purpose: string;\n runtime: AgentRuntimeInfo;\n billing: AgentBilling;\n capabilities: AgentCapability[];\n tags: string[];\n links: { url: string; title: string; icon?: string }[];\n /** Populated by the backend status probe; undefined in the static view. */\n status?: AgentStatus;\n rawEntity: Entity;\n}\n\nconst VALID_CATEGORIES = new Set<AgentCapabilityCategory>([\n 'reasoning',\n 'retrieval',\n 'tools',\n 'vision',\n 'voice',\n 'data',\n 'safety',\n]);\n\nfunction annotation(entity: Entity, key: string): string | undefined {\n return entity.metadata.annotations?.[`${AI_AGENT_ANNOTATION_PREFIX}/${key}`];\n}\n\nfunction parseFloatSafe(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseCapabilities(raw: string | undefined): AgentCapability[] {\n if (!raw) return [];\n return raw\n .split(/[,\\n]/)\n .map(s => s.trim())\n .filter(Boolean)\n .map(token => {\n const [label, catRaw] = token.split(':').map(s => s.trim());\n const category = catRaw ? (catRaw as AgentCapabilityCategory) : undefined;\n return {\n label,\n category:\n category && VALID_CATEGORIES.has(category) ? category : undefined,\n };\n });\n}\n\nfunction entityRef(entity: Entity): string {\n const ns = entity.metadata.namespace ?? 'default';\n return `${entity.kind.toLowerCase()}:${ns}/${entity.metadata.name}`;\n}\n\nfunction purpose(entity: Entity): string {\n const explicit = annotation(entity, 'purpose');\n return (explicit ?? entity.metadata.description ?? '').trim();\n}\n\n/** Map a Backstage catalog Component entity to the plugin's AiAgent shape. */\nexport function entityToAgent(\n entity: Entity,\n status?: AgentStatus,\n): AiAgent | undefined {\n if (entity.spec?.type !== AI_AGENT_TYPE) return undefined;\n\n const links = (entity.metadata.links ?? []).map(l => ({\n url: l.url,\n title: l.title ?? l.url,\n icon: l.icon,\n }));\n\n return {\n entityRef: entityRef(entity),\n name: entity.metadata.name,\n title: entity.metadata.title,\n description: entity.metadata.description,\n avatarUrl: annotation(entity, 'avatar'),\n owner: (entity.spec as Record<string, unknown> | undefined)?.owner as\n | string\n | undefined,\n system: (entity.spec as Record<string, unknown> | undefined)?.system as\n | string\n | undefined,\n lifecycle: (entity.spec as Record<string, unknown> | undefined)?.lifecycle as\n | string\n | undefined,\n version: annotation(entity, 'version'),\n purpose: purpose(entity),\n runtime: {\n runtime: annotation(entity, 'runtime') ?? 'custom',\n runtimeHandle: annotation(entity, 'runtime-handle'),\n endpoint: annotation(entity, 'endpoint'),\n healthUrl: annotation(entity, 'health'),\n },\n billing: {\n model: annotation(entity, 'billing-model') ?? 'free',\n unitCost: parseFloatSafe(annotation(entity, 'cost-per-1k')),\n budget: parseFloatSafe(annotation(entity, 'budget')),\n },\n capabilities: parseCapabilities(annotation(entity, 'capabilities')),\n tags: entity.metadata.tags ?? [],\n links,\n status,\n rawEntity: entity,\n };\n}", "import { createApiRef, FetchApi } from '@backstage/core-plugin-api';\nimport type { CatalogApi } from '@backstage/catalog-client';\nimport {\n AI_AGENT_TYPE,\n AiAgent,\n AgentStatus,\n entityToAgent,\n} from './types';\n\nexport interface AiAgentsApiInterface {\n listAgents(): Promise<AiAgent[]>;\n getAgent(entityRef: string): Promise<AiAgent | undefined>;\n /** Probe live status for the given entity refs via the backend. */\n getStatuses(entityRefs: string[]): Promise<Record<string, AgentStatus>>;\n}\n\nexport const aiAgentsApiRef = createApiRef<AiAgentsApiInterface>({\n id: 'plugin.ai-agents.api',\n});\n\nexport class AiAgentsApi implements AiAgentsApiInterface {\n constructor(\n private readonly opts: {\n fetchApi: FetchApi;\n catalogApi: CatalogApi;\n },\n private readonly basePath = '/api/ai-agents',\n ) {}\n\n async listAgents(): Promise<AiAgent[]> {\n const result = await this.opts.catalogApi.getEntities({\n filter: { kind: 'Component', 'spec.type': AI_AGENT_TYPE },\n });\n return result.items\n .map(e => entityToAgent(e))\n .filter((a): a is AiAgent => a !== undefined);\n }\n\n async getAgent(entityRef: string): Promise<AiAgent | undefined> {\n const entity = await this.opts.catalogApi.getEntityByRef(entityRef);\n return entity ? entityToAgent(entity) : undefined;\n }\n\n async getStatuses(entityRefs: string[]): Promise<Record<string, AgentStatus>> {\n if (!entityRefs.length) return {};\n try {\n const res = await this.opts.fetchApi.fetch(\n `${this.basePath}/statuses?refs=${encodeURIComponent(entityRefs.join(','))}`,\n );\n if (!res.ok) return {};\n return (await res.json()) as Record<string, AgentStatus>;\n } catch {\n return {};\n }\n }\n}", "import { useCallback, useMemo, useState } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useAsyncRetry } from 'react-use';\nimport { aiAgentsApiRef } from '../api';\nimport type { AiAgent } from '../types';\n\nexport interface AgentFilters {\n search: string;\n runtime: string[];\n capability: string[];\n lifecycle: string[];\n owner: string[];\n}\n\nexport const initialFilters: AgentFilters = {\n search: '',\n runtime: [],\n capability: [],\n lifecycle: [],\n owner: [],\n};\n\nexport function applyFilters(\n agents: AiAgent[],\n filters: AgentFilters,\n): AiAgent[] {\n const search = filters.search.trim().toLowerCase();\n return agents.filter(a => {\n if (search) {\n const haystack = [a.name, a.title, a.description, a.purpose]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n if (!haystack.includes(search)) return false;\n }\n if (filters.runtime.length && !filters.runtime.includes(a.runtime.runtime)) {\n return false;\n }\n if (filters.capability.length) {\n const caps = a.capabilities.map(c => c.label);\n if (!filters.capability.every(c => caps.includes(c))) return false;\n }\n if (filters.lifecycle.length && !filters.lifecycle.includes(a.lifecycle ?? '')) {\n return false;\n }\n if (filters.owner.length && !filters.owner.includes(a.owner ?? '')) {\n return false;\n }\n return true;\n });\n}\n\nexport function useAgents() {\n const api = useApi(aiAgentsApiRef);\n const {\n value: agents,\n loading,\n error,\n retry,\n } = useAsyncRetry(() => api.listAgents(), [api]);\n\n const [filters, setFilters] = useState<AgentFilters>(initialFilters);\n\n const filtered = useMemo(\n () => applyFilters(agents ?? [], filters),\n [agents, filters],\n );\n\n const update = useCallback(\n (patch: Partial<AgentFilters>) =>\n setFilters(prev => ({ ...prev, ...patch })),\n [],\n );\n\n const reset = useCallback(() => setFilters(initialFilters), []);\n\n return {\n agents: filtered,\n allAgents: agents ?? [],\n loading,\n error,\n retry,\n filters,\n update,\n reset,\n };\n}", "import React from 'react';\nimport {\n Box,\n IconButton,\n InputAdornment,\n MenuItem,\n Paper,\n TextField,\n Tooltip,\n} from '@mui/material';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport type { AiAgent } from '../types';\nimport type { AgentFilters } from '../hooks/useAgents';\n\nexport interface AgentFiltersBarProps {\n agents: AiAgent[];\n filters: AgentFilters;\n onChange: (patch: Partial<AgentFilters>) => void;\n onReset: () => void;\n}\n\nconst SELECT_PROPS = {\n SelectProps: { multiple: true, renderValue: (v: unknown) => (v as string[]).join(', ') || 'All' },\n} as const;\n\nexport const AgentFiltersBar: React.FC<AgentFiltersBarProps> = ({\n agents,\n filters,\n onChange,\n onReset,\n}) => {\n const runtimes = Array.from(new Set(agents.map(a => a.runtime.runtime))).sort();\n const capabilities = Array.from(\n new Set(agents.flatMap(a => a.capabilities.map(c => c.label))),\n ).sort();\n const lifecycles = Array.from(new Set(agents.map(a => a.lifecycle).filter(Boolean))) as string[];\n const owners = Array.from(new Set(agents.map(a => a.owner).filter(Boolean))) as string[];\n\n const hasFilters =\n filters.search ||\n filters.runtime.length ||\n filters.capability.length ||\n filters.lifecycle.length ||\n filters.owner.length;\n\n return (\n <Paper sx={{ p: 1.5, mb: 2, display: 'flex', gap: 1.5, flexWrap: 'wrap', alignItems: 'center' }}>\n <TextField\n size=\"small\"\n placeholder=\"Search agents\u2026\"\n value={filters.search}\n onChange={e => onChange({ search: e.target.value })}\n sx={{ minWidth: 220, flexGrow: 1 }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n endAdornment: filters.search ? (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={() => onChange({ search: '' })}>\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n }}\n />\n\n <TextField select size=\"small\" label=\"Runtime\" value={filters.runtime}\n onChange={e => onChange({ runtime: e.target.value as unknown as string[] })}\n sx={{ minWidth: 140 }} {...SELECT_PROPS}>\n {runtimes.map(r => <MenuItem key={r} value={r}>{r}</MenuItem>)}\n </TextField>\n\n <TextField select size=\"small\" label=\"Capability\" value={filters.capability}\n onChange={e => onChange({ capability: e.target.value as unknown as string[] })}\n sx={{ minWidth: 150 }} {...SELECT_PROPS}>\n {capabilities.map(c => <MenuItem key={c} value={c}>{c}</MenuItem>)}\n </TextField>\n\n <TextField select size=\"small\" label=\"Lifecycle\" value={filters.lifecycle}\n onChange={e => onChange({ lifecycle: e.target.value as unknown as string[] })}\n sx={{ minWidth: 130 }} {...SELECT_PROPS}>\n {lifecycles.map(l => <MenuItem key={l} value={l}>{l}</MenuItem>)}\n </TextField>\n\n <TextField select size=\"small\" label=\"Owner\" value={filters.owner}\n onChange={e => onChange({ owner: e.target.value as unknown as string[] })}\n sx={{ minWidth: 140 }} {...SELECT_PROPS}>\n {owners.map(o => <MenuItem key={o} value={o}>{o}</MenuItem>)}\n </TextField>\n\n {hasFilters && (\n <Tooltip title=\"Clear filters\">\n <IconButton size=\"small\" onClick={onReset}>\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Box sx={{ ml: 'auto', alignSelf: 'center' }}>\n <strong>{agents.length}</strong> agent{agents.length !== 1 ? 's' : ''}\n </Box>\n </Paper>\n );\n};", "import React, { useState } from 'react';\nimport { Box } from '@mui/material';\n\nconst PALETTE = [\n '#1976d2', '#388e3c', '#f57c00', '#7b1fa2',\n '#c62828', '#0097a7', '#5d4037', '#455a64',\n];\n\nfunction initialsOf(name: string): string {\n const parts = name.replace(/[-_]+/g, ' ').trim().split(/\\s+/);\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction colorFor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = (hash * 31 + name.charCodeAt(i)) | 0;\n return PALETTE[Math.abs(hash) % PALETTE.length];\n}\n\nexport interface AgentAvatarProps {\n name: string;\n avatarUrl?: string;\n size?: number;\n}\n\nexport const AgentAvatar: React.FC<AgentAvatarProps> = ({\n name,\n avatarUrl,\n size = 44,\n}) => {\n const [broken, setBroken] = useState(false);\n const showImage = avatarUrl && !broken;\n\n return (\n <Box\n sx={{\n width: size,\n height: size,\n flexShrink: 0,\n borderRadius: '50%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: showImage ? 'transparent' : colorFor(name),\n color: 'common.white',\n fontSize: size * 0.36,\n fontWeight: 700,\n }}\n >\n {showImage ? (\n <img\n src={avatarUrl}\n alt={name}\n width={size}\n height={size}\n onError={() => setBroken(true)}\n style={{ objectFit: 'cover', borderRadius: '50%' }}\n />\n ) : (\n initialsOf(name)\n )}\n </Box>\n );\n};", "import React from 'react';\nimport { Box, Tooltip, Typography } from '@mui/material';\nimport type { AgentStatus, AgentStatusState } from '../types';\n\nconst STATE_COLOR: Record<AgentStatusState, string> = {\n healthy: 'success.main',\n degraded: 'warning.main',\n down: 'error.main',\n unknown: 'text.disabled',\n};\n\nexport interface AgentStatusBadgeProps {\n status?: AgentStatus;\n}\n\nexport const AgentStatusBadge: React.FC<AgentStatusBadgeProps> = ({ status }) => {\n const state = status?.state ?? 'unknown';\n const color = STATE_COLOR[state];\n const ring = state === 'unknown' ? `1px dashed ${color}` : 'none';\n\n const title = status\n ? [\n `Status: ${state}`,\n status.lastChecked ? `Last checked: ${new Date(status.lastChecked).toLocaleString()}` : null,\n status.latencyMs != null ? `Latency: ${status.latencyMs}ms` : null,\n status.message ? status.message : null,\n ]\n .filter(Boolean)\n .join(' \u00B7 ')\n : 'Status: unknown';\n\n return (\n <Tooltip title={title} arrow>\n <Box\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.75,\n cursor: 'help',\n }}\n >\n <Box\n component=\"span\"\n sx={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n bgcolor: color,\n border: ring,\n flexShrink: 0,\n }}\n />\n {status?.latencyMs != null && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {status.latencyMs}ms\n </Typography>\n )}\n </Box>\n </Tooltip>\n );\n};", "import React, { useState } from 'react';\nimport { Chip, Box, Popover } from '@mui/material';\nimport type { AgentCapability, AgentCapabilityCategory } from '../types';\n\nconst CATEGORY_COLOR: Record<\n AgentCapabilityCategory,\n 'primary' | 'secondary' | 'success' | 'warning' | 'info' | 'error' | 'default'\n> = {\n reasoning: 'primary',\n retrieval: 'info',\n tools: 'secondary',\n vision: 'success',\n voice: 'warning',\n data: 'default',\n safety: 'error',\n};\n\nconst MAX_VISIBLE = 5;\n\nexport interface AgentCapabilitiesProps {\n capabilities: AgentCapability[];\n max?: number;\n size?: 'small' | 'medium';\n}\n\nexport const AgentCapabilities: React.FC<AgentCapabilitiesProps> = ({\n capabilities,\n max = MAX_VISIBLE,\n size = 'small',\n}) => {\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n\n if (!capabilities.length) return null;\n const visible = capabilities.slice(0, max);\n const overflow = capabilities.length - visible.length;\n\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {visible.map((c, i) => (\n <Chip\n key={`${c.label}-${i}`}\n label={c.label}\n size={size}\n color={c.category ? CATEGORY_COLOR[c.category] : 'default'}\n variant={c.category ? 'filled' : 'outlined'}\n />\n ))}\n {overflow > 0 && (\n <>\n <Chip\n label={`+${overflow}`}\n size={size}\n clickable\n onClick={e => {\n e.stopPropagation();\n setAnchor(e.currentTarget);\n }}\n />\n <Popover\n open={Boolean(anchor)}\n anchorEl={anchor}\n onClose={() => setAnchor(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n >\n <Box sx={{ p: 1, maxWidth: 280, display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {capabilities.map((c, i) => (\n <Chip\n key={`${c.label}-${i}`}\n label={c.label}\n size=\"small\"\n color={c.category ? CATEGORY_COLOR[c.category] : 'default'}\n variant={c.category ? 'filled' : 'outlined'}\n />\n ))}\n </Box>\n </Popover>\n </>\n )}\n </Box>\n );\n};", "import React from 'react';\nimport { Chip, Box } from '@mui/material';\nimport MemoryIcon from '@mui/icons-material/Memory';\nimport CloudQueueIcon from '@mui/icons-material/CloudQueue';\nimport FunctionsIcon from '@mui/icons-material/Functions';\nimport ExtensionIcon from '@mui/icons-material/Extension';\nimport type { AgentRuntimeName } from '../types';\n\nconst RUNTIME_META: Record<\n string,\n { label: string; icon: React.ReactNode }\n> = {\n 'bedrock-agentcore': { label: 'Bedrock AgentCore', icon: <CloudQueueIcon fontSize=\"small\" /> },\n litellm: { label: 'LiteLLM', icon: <MemoryIcon fontSize=\"small\" /> },\n lambda: { label: 'AWS Lambda', icon: <FunctionsIcon fontSize=\"small\" /> },\n custom: { label: 'Custom', icon: <ExtensionIcon fontSize=\"small\" /> },\n};\n\nexport interface RuntimeBadgeProps {\n runtime: AgentRuntimeName;\n size?: 'small' | 'medium';\n onClick?: (runtime: string) => void;\n}\n\nexport const RuntimeBadge: React.FC<RuntimeBadgeProps> = ({\n runtime,\n size = 'small',\n onClick,\n}) => {\n const meta = RUNTIME_META[runtime] ?? {\n label: String(runtime),\n icon: <ExtensionIcon fontSize=\"small\" />,\n };\n return (\n <Chip\n size={size}\n variant=\"outlined\"\n label={\n <Box sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.5 }}>\n {meta.icon}\n {meta.label}\n </Box>\n }\n onClick={onClick ? () => onClick(runtime) : undefined}\n clickable={Boolean(onClick)}\n />\n );\n};", "import React from 'react';\nimport { Chip, Box, Typography } from '@mui/material';\nimport type { AgentBilling } from '../types';\n\nconst BILLING_COLOR: Record<string, 'primary' | 'secondary' | 'success' | 'default'> = {\n 'per-invocation': 'primary',\n 'per-token': 'secondary',\n subscription: 'success',\n free: 'default',\n};\n\nexport interface BillingBadgeProps {\n billing: AgentBilling;\n}\n\nexport const BillingBadge: React.FC<BillingBadgeProps> = ({ billing }) => {\n const color = BILLING_COLOR[billing.model] ?? 'default';\n const unitLabel =\n billing.model === 'per-token'\n ? 'per 1M tokens'\n : billing.model === 'per-invocation'\n ? 'per 1k calls'\n : null;\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25 }}>\n <Chip size=\"small\" color={color} label={billing.model} variant=\"outlined\" />\n {billing.unitCost != null && unitLabel && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n ~${billing.unitCost} {unitLabel}\n </Typography>\n )}\n {billing.budget != null && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n budget: ${billing.budget}\n </Typography>\n )}\n </Box>\n );\n};", "import React from 'react';\nimport { Box, Card, CardActionArea, Chip, Link, Tooltip, Typography } from '@mui/material';\nimport DashboardIcon from '@mui/icons-material/Dashboard';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport ArticleIcon from '@mui/icons-material/Article';\nimport BugReportIcon from '@mui/icons-material/BugReport';\nimport type { AiAgent } from '../types';\nimport { AgentAvatar } from './AgentAvatar';\nimport { AgentStatusBadge } from './AgentStatusBadge';\nimport { AgentCapabilities } from './AgentCapabilities';\nimport { RuntimeBadge } from './RuntimeBadge';\nimport { BillingBadge } from './BillingBadge';\n\nconst LIFECYCLE_COLOR: Record<string, 'success' | 'warning' | 'error' | 'default'> = {\n production: 'success',\n experimental: 'warning',\n deprecated: 'error',\n};\n\nconst LINK_ICON: Record<string, React.ReactNode> = {\n dashboard: <DashboardIcon fontSize=\"small\" />,\n docs: <DescriptionIcon fontSize=\"small\" />,\n playbook: <ArticleIcon fontSize=\"small\" />,\n issues: <BugReportIcon fontSize=\"small\" />,\n};\n\nexport interface AgentCardProps {\n agent: AiAgent;\n onClick?: (agent: AiAgent) => void;\n onRuntimeClick?: (runtime: string) => void;\n}\n\nexport const AgentCard: React.FC<AgentCardProps> = ({\n agent,\n onClick,\n onRuntimeClick,\n}) => {\n const title = agent.title ?? agent.name;\n const lifecycleColor = agent.lifecycle\n ? LIFECYCLE_COLOR[agent.lifecycle] ?? 'default'\n : 'default';\n\n return (\n <Card\n variant=\"outlined\"\n sx={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n transition: theme => `box-shadow ${theme.transitions.duration.short}ms`,\n '&:hover': { boxShadow: 6 },\n }}\n >\n <CardActionArea\n onClick={() => onClick?.(agent)}\n sx={{ flexGrow: 1, p: 2, alignItems: 'stretch', display: 'flex' }}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n {/* Header: avatar + title + status */}\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5, mb: 1 }}>\n <AgentAvatar name={agent.name} avatarUrl={agent.avatarUrl} />\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography variant=\"subtitle1\" fontWeight={700} noWrap title={title}>\n {title}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\" noWrap>\n {agent.name}\n </Typography>\n </Box>\n <AgentStatusBadge status={agent.status} />\n </Box>\n\n {/* Purpose */}\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n minHeight: '2.6em',\n mb: 1.5,\n }}\n >\n {agent.purpose || 'No description provided.'}\n </Typography>\n\n {/* Runtime */}\n <Box sx={{ mb: 1 }}>\n <RuntimeBadge\n runtime={agent.runtime.runtime}\n onClick={onRuntimeClick}\n />\n </Box>\n\n {/* Capabilities */}\n {agent.capabilities.length > 0 && (\n <Box sx={{ mb: 1.5 }}>\n <AgentCapabilities capabilities={agent.capabilities} />\n </Box>\n )}\n\n {/* Billing */}\n <Box sx={{ mb: 1.5 }}>\n <BillingBadge billing={agent.billing} />\n </Box>\n\n {/* Footer: owner + lifecycle + version */}\n <Box\n sx={{\n mt: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: 0.75,\n flexWrap: 'wrap',\n }}\n >\n {agent.owner && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {agent.owner}\n </Typography>\n )}\n {agent.lifecycle && (\n <Chip\n size=\"small\"\n color={lifecycleColor}\n label={agent.lifecycle}\n variant=\"outlined\"\n sx={{ height: 20, '& .MuiChip-label': { px: 0.75, fontSize: '0.7rem' } }}\n />\n )}\n {agent.version && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n v{agent.version}\n </Typography>\n )}\n </Box>\n\n {/* Links */}\n {agent.links.length > 0 && (\n <Box sx={{ display: 'flex', gap: 1.5, mt: 1.5, pt: 1, borderTop: '1px solid', borderColor: 'divider' }}>\n {agent.links.slice(0, 4).map((l, i) => (\n <Tooltip key={i} title={l.title}>\n <Link\n href={l.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={e => e.stopPropagation()}\n sx={{ display: 'inline-flex', color: 'text.secondary' }}\n >\n {LINK_ICON[l.icon ?? ''] ?? <DescriptionIcon fontSize=\"small\" />}\n </Link>\n </Tooltip>\n ))}\n </Box>\n )}\n </Box>\n </CardActionArea>\n </Card>\n );\n};", "import React from 'react';\nimport Box from '@mui/material/Box';\nimport type { AiAgent } from '../types';\nimport { AgentCard } from './AgentCard';\n\nexport interface AgentsGridProps {\n agents: AiAgent[];\n onAgentClick?: (agent: AiAgent) => void;\n onRuntimeClick?: (runtime: string) => void;\n}\n\nexport const AgentsGrid: React.FC<AgentsGridProps> = ({\n agents,\n onAgentClick,\n onRuntimeClick,\n}) => {\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))',\n gap: 2,\n }}\n >\n {agents.map(a => (\n <AgentCard\n key={a.entityRef}\n agent={a}\n onClick={onAgentClick}\n onRuntimeClick={onRuntimeClick}\n />\n ))}\n </Box>\n );\n};", "import React from 'react';\nimport {\n Box,\n Chip,\n Drawer,\n IconButton,\n Link,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Stack,\n Typography,\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport DashboardIcon from '@mui/icons-material/Dashboard';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport ArticleIcon from '@mui/icons-material/Article';\nimport BugReportIcon from '@mui/icons-material/BugReport';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport type { AiAgent } from '../types';\nimport { AgentAvatar } from './AgentAvatar';\nimport { AgentStatusBadge } from './AgentStatusBadge';\nimport { AgentCapabilities } from './AgentCapabilities';\nimport { RuntimeBadge } from './RuntimeBadge';\nimport { BillingBadge } from './BillingBadge';\n\nconst LINK_ICON: Record<string, React.ReactNode> = {\n dashboard: <DashboardIcon fontSize=\"small\" />,\n docs: <DescriptionIcon fontSize=\"small\" />,\n playbook: <ArticleIcon fontSize=\"small\" />,\n issues: <BugReportIcon fontSize=\"small\" />,\n};\n\nexport interface AgentDetailDrawerProps {\n agent: AiAgent | null;\n open: boolean;\n onClose: () => void;\n onRefreshStatus?: (entityRef: string) => void;\n}\n\nconst Row: React.FC<{ label: string; children: React.ReactNode }> = ({\n label,\n children,\n}) => (\n <Box sx={{ display: 'flex', gap: 1, mb: 1 }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ minWidth: 110 }}>\n {label}\n </Typography>\n <Box sx={{ flexGrow: 1 }}>{children}</Box>\n </Box>\n);\n\nexport const AgentDetailDrawer: React.FC<AgentDetailDrawerProps> = ({\n agent,\n open,\n onClose,\n onRefreshStatus,\n}) => {\n if (!agent) return null;\n const title = agent.title ?? agent.name;\n\n const copyRef = () => {\n navigator.clipboard?.writeText(agent.entityRef).catch(() => {});\n };\n\n return (\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={onClose}\n sx={{ '& .MuiDrawer-paper': { width: { xs: '100%', sm: 480 } } }}\n >\n <Box sx={{ p: 2, display: 'flex', alignItems: 'flex-start', gap: 1.5 }}>\n <AgentAvatar name={agent.name} avatarUrl={agent.avatarUrl} size={56} />\n <Box sx={{ flexGrow: 1 }}>\n <Typography variant=\"h6\">{title}</Typography>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n cursor: 'pointer',\n }}\n onClick={copyRef}\n >\n {agent.entityRef}\n <ContentCopyIcon sx={{ fontSize: 12 }} />\n </Typography>\n </Box>\n <IconButton size=\"small\" onClick={onClose}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Box sx={{ px: 2, pb: 2, display: 'flex', alignItems: 'center', gap: 1 }}>\n <AgentStatusBadge status={agent.status} />\n {onRefreshStatus && (\n <IconButton\n size=\"small\"\n title=\"Refresh status\"\n onClick={() => onRefreshStatus(agent.entityRef)}\n >\n <RefreshIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n\n <Box sx={{ px: 2, pb: 3 }}>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n {agent.purpose || agent.description || 'No description provided.'}\n </Typography>\n\n <Row label=\"Runtime\">\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <RuntimeBadge runtime={agent.runtime.runtime} />\n {agent.runtime.endpoint && (\n <Link\n href={agent.runtime.endpoint}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.5 }}\n >\n endpoint <OpenInNewIcon sx={{ fontSize: 12 }} />\n </Link>\n )}\n </Stack>\n {agent.runtime.runtimeHandle && (\n <Typography variant=\"caption\" display=\"block\" color=\"text.secondary\" sx={{ mt: 0.5, wordBreak: 'break-all' }}>\n {agent.runtime.runtimeHandle}\n </Typography>\n )}\n </Row>\n\n <Row label=\"Capabilities\">\n {agent.capabilities.length ? (\n <AgentCapabilities capabilities={agent.capabilities} max={20} />\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\u2014</Typography>\n )}\n </Row>\n\n <Row label=\"Billing\">\n <BillingBadge billing={agent.billing} />\n </Row>\n\n <Row label=\"Owner\">{agent.owner ?? '\u2014'}</Row>\n <Row label=\"System\">{agent.system ?? '\u2014'}</Row>\n <Row label=\"Lifecycle\">{agent.lifecycle ?? '\u2014'}</Row>\n <Row label=\"Version\">{agent.version ?? '\u2014'}</Row>\n <Row label=\"Tags\">\n {agent.tags.length ? (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {agent.tags.map(t => (\n <Chip key={t} size=\"small\" label={t} variant=\"outlined\" />\n ))}\n </Box>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\u2014</Typography>\n )}\n </Row>\n\n {agent.links.length > 0 && (\n <Row label=\"Links\">\n <List dense disablePadding>\n {agent.links.map((l, i) => (\n <ListItem\n key={i}\n component=\"a\"\n href={l.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{ color: 'text.primary', borderRadius: 1, '&:hover': { bgcolor: 'action.hover' } }}\n >\n <ListItemIcon sx={{ minWidth: 28 }}>\n {LINK_ICON[l.icon ?? ''] ?? <DescriptionIcon fontSize=\"small\" />}\n </ListItemIcon>\n <ListItemText primary={l.title} secondary={l.url}\n secondaryTypographyProps={{ sx: { fontSize: '0.7rem' } as const, noWrap: true }} />\n </ListItem>\n ))}\n </List>\n </Row>\n )}\n\n <Row label=\"Catalog\">\n <Link href={`/catalog/${agent.entityRef.replace(':', '/')}`}>\n Open in catalog <OpenInNewIcon sx={{ fontSize: 12, verticalAlign: 'middle' }} />\n </Link>\n </Row>\n </Box>\n </Drawer>\n );\n};", "import React, { useCallback, useEffect, useState } from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport { EmptyState } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { aiAgentsApiRef } from '../api';\nimport type { AiAgent, AgentStatus } from '../types';\nimport { useAgents } from '../hooks/useAgents';\nimport { AgentFiltersBar } from './AgentFilters';\nimport { AgentsGrid } from './AgentsGrid';\nimport { AgentDetailDrawer } from './AgentDetailDrawer';\n\nconst POLL_INTERVAL_MS = 30_000;\n\nexport const AgentsPage: React.FC = () => {\n const api = useApi(aiAgentsApiRef);\n const { agents, allAgents, loading, error, retry, filters, update, reset } =\n useAgents();\n\n const [selected, setSelected] = useState<AiAgent | null>(null);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [statuses, setStatuses] = useState<Record<string, AgentStatus>>({});\n\n const refs = allAgents.map(a => a.entityRef);\n\n // Initial + on-ref-change status fetch. Polling runs separately below.\n useEffect(() => {\n let cancelled = false;\n if (!refs.length) return;\n api.getStatuses(refs).then(result => {\n if (!cancelled) setStatuses(result);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [api, refs.join(',')]);\n\n // Best-effort polling for live status while the page is mounted.\n useEffect(() => {\n if (!refs.length) return;\n const id = setInterval(async () => {\n const result = await api.getStatuses(refs);\n setStatuses(prev => ({ ...prev, ...result }));\n }, POLL_INTERVAL_MS);\n return () => clearInterval(id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [api, refs.length]);\n\n const agentsWithStatus = agents.map(a => ({\n ...a,\n status: statuses[a.entityRef] ?? a.status,\n }));\n\n const handleCardClick = useCallback((agent: AiAgent) => {\n setSelected(agent);\n setDrawerOpen(true);\n }, []);\n\n const handleRuntimeClick = useCallback(\n (runtime: string) => {\n if (!filters.runtime.includes(runtime)) {\n update({ runtime: [...filters.runtime, runtime] });\n }\n },\n [filters.runtime, update],\n );\n\n const handleRefreshStatus = useCallback(\n async (entityRef: string) => {\n const result = await api.getStatuses([entityRef]);\n setStatuses(prev => ({ ...prev, ...result }));\n setSelected(prev =>\n prev && prev.entityRef === entityRef\n ? { ...prev, status: result[entityRef] ?? prev.status }\n : prev,\n );\n },\n [api],\n );\n\n if (loading && !allAgents.length) {\n return (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" minHeight=\"40vh\">\n <CircularProgress />\n </Box>\n );\n }\n\n if (error) {\n return (\n <EmptyState\n title=\"Failed to load AI agents\"\n description={error.message}\n missing=\"content\"\n />\n );\n }\n\n return (\n <Box sx={{ p: 3 }}>\n <Box sx={{ mb: 2 }}>\n <Typography variant=\"h4\">AI Agents</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n AI agents registered in the catalog as <code>Component</code> entities\n with <code>spec.type: ai-agent</code>.\n </Typography>\n </Box>\n\n <AgentFiltersBar\n agents={allAgents}\n filters={filters}\n onChange={update}\n onReset={reset}\n />\n\n {agentsWithStatus.length === 0 ? (\n <EmptyState\n title=\"No AI agents registered\"\n description=\"Add a Component with spec.type: ai-agent to the catalog, or adjust your filters.\"\n missing=\"content\"\n action={<button onClick={() => retry()}>Retry</button>}\n />\n ) : (\n <AgentsGrid\n agents={agentsWithStatus}\n onAgentClick={handleCardClick}\n onRuntimeClick={handleRuntimeClick}\n />\n )}\n\n <AgentDetailDrawer\n agent={selected}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onRefreshStatus={handleRefreshStatus}\n />\n </Box>\n );\n};", "export { aiAgentsPlugin } from './plugin';\nexport { AgentsPage } from './components/AgentsPage';\nexport { AgentCard } from './components/AgentCard';\nexport { aiAgentsApiRef, AiAgentsApi } from './api';\nexport type { AiAgentsApiInterface } from './api';\nexport {\n AI_AGENT_TYPE,\n AI_AGENT_ANNOTATION_PREFIX,\n entityToAgent,\n} from './types';\nexport type {\n AiAgent,\n AgentRuntimeInfo,\n AgentRuntimeName,\n AgentBilling,\n AgentBillingModel,\n AgentCapability,\n AgentCapabilityCategory,\n AgentStatus,\n AgentStatusState,\n} from './types';", "import React from 'react';\nimport { SmartToy as AgentIcon } from '@mui/icons-material';\nimport {\n ApiBlueprint,\n PageBlueprint,\n createFrontendPlugin,\n fetchApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { aiAgentsApiRef, AiAgentsApi } from './api';\n\nconst aiAgentsApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: aiAgentsApiRef,\n deps: { fetchApi: fetchApiRef, catalogApi: catalogApiRef },\n factory: ({ fetchApi, catalogApi }) =>\n new AiAgentsApi({ fetchApi, catalogApi }),\n }),\n});\n\nconst aiAgentsPage = PageBlueprint.make({\n params: {\n path: '/ai-agents',\n title: 'AI Agents',\n icon: <AgentIcon />,\n loader: async () => {\n const { AgentsPage } = await import('./components/AgentsPage');\n return <AgentsPage />;\n },\n },\n});\n\nexport const aiAgentsPlugin = createFrontendPlugin({\n pluginId: 'ai-agents',\n extensions: [aiAgentsApi, aiAgentsPage],\n});"],
5
+ "mappings": "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",
6
+ "names": ["entityRef", "import_core_plugin_api", "import_react", "React", "SearchIcon", "ClearIcon", "import_react", "import_material", "React", "import_react", "import_material", "React", "import_react", "import_material", "React", "import_react", "import_material", "React", "CloudQueueIcon", "MemoryIcon", "FunctionsIcon", "ExtensionIcon", "import_react", "import_material", "React", "import_react", "import_material", "React", "DashboardIcon", "DescriptionIcon", "ArticleIcon", "BugReportIcon", "import_react", "React", "Box", "import_react", "import_material", "import_Dashboard", "import_Description", "import_Article", "import_BugReport", "LINK_ICON", "React", "DashboardIcon", "DescriptionIcon", "ArticleIcon", "BugReportIcon", "ContentCopyIcon", "CloseIcon", "RefreshIcon", "OpenInNewIcon", "import_react", "import_material", "import_core_plugin_api", "entityRef", "React", "import_react", "React", "AgentIcon", "AgentsPage"]
7
+ }
@@ -0,0 +1,7 @@
1
+ export { aiAgentsPlugin } from './plugin';
2
+ export { AgentsPage } from './components/AgentsPage';
3
+ export { AgentCard } from './components/AgentCard';
4
+ export { aiAgentsApiRef, AiAgentsApi } from './api';
5
+ export type { AiAgentsApiInterface } from './api';
6
+ export { AI_AGENT_TYPE, AI_AGENT_ANNOTATION_PREFIX, entityToAgent, } from './types';
7
+ export type { AiAgent, AgentRuntimeInfo, AgentRuntimeName, AgentBilling, AgentBillingModel, AgentCapability, AgentCapabilityCategory, AgentStatus, AgentStatusState, } from './types';