diff --git a/ui/src/components/sidebars/AgentDetailsSidebar.tsx b/ui/src/components/sidebars/AgentDetailsSidebar.tsx index 158b4669d..394b047e2 100644 --- a/ui/src/components/sidebars/AgentDetailsSidebar.tsx +++ b/ui/src/components/sidebars/AgentDetailsSidebar.tsx @@ -263,22 +263,52 @@ export function AgentDetailsSidebar({ selectedAgentName, currentAgent, allTools - {selectedTeam.agent.spec.skills.refs.map((skillRef, index) => ( - - - - -
- {skillRef} -
-
-
- -

{skillRef}

-
-
-
- ))} + {selectedTeam.agent.spec.skills.refs.map((skillRef, index) => { + // Parse OCI image reference: [registry/]repository[:tag][@digest] + // Groups: (1) registry, (2) repository, (3) tag, (4) digest + const refMatch = skillRef.match( + /^(?:((?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+(?::\d+)?|localhost(?::\d+)?|[a-zA-Z0-9-]+:\d+)\/)?([^:@]+)(?::([^@]+))?(?:@(.+))?$/ + ); + const registry = refMatch?.[1] ?? null; + const repoName = refMatch?.[2] ?? null; + const tag = refMatch?.[3] ?? null; + const digest = refMatch?.[4] ?? null; + + // Only show a version badge when the ref was successfully parsed. + // Truncate digests to keep the badge compact. + const versionBadge = refMatch + ? tag ?? (digest ? (digest.length > 16 ? digest.substring(0, 16) + "\u2026" : digest) : "latest") + : null; + const displayName = repoName ?? skillRef; + return ( + + + + +
+
+ {displayName} + {versionBadge && ( + + {versionBadge} + + )} +
+ {registry && ( + + {registry} + + )} +
+
+
+ +

{skillRef}

+
+
+
+ ); + })}