diff --git a/ui/src/pages/CompanySkills.tsx b/ui/src/pages/CompanySkills.tsx index 1f5b3ea3ab5..1c6f6b1fdcd 100644 --- a/ui/src/pages/CompanySkills.tsx +++ b/ui/src/pages/CompanySkills.tsx @@ -530,6 +530,16 @@ function formatBytes(bytes: number) { return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; } +// Some bundled skills ship with a frontmatter-only SKILL.md whose extracted +// description is just punctuation (e.g. ">"). Strip leading markdown syntax and +// fall back to a neutral placeholder so cards don't render bare glyphs. +function cardDescriptionText(raw: string | null | undefined): string { + const cleaned = (raw ?? "") + .replace(/^[\s>#*_\-`>]+/, "") + .trim(); + return cleaned.length >= 3 ? cleaned : "No description yet."; +} + // --------------------------------------------------------------------------- // Skills Store discovery grid (PAP-10879) // --------------------------------------------------------------------------- @@ -835,7 +845,7 @@ function SkillCard({ card, onOpen }: { card: DiscoveryCard; onOpen: (card: Disco ) : null}

- {card.description || "No description yet."} + {cardDescriptionText(card.description)}

@@ -2936,15 +2946,19 @@ function SkillDetailPage({
- - {detail.categories.slice(0, 4).map((category) => ( ))} {detail.sourceType === "github" ? ( - - {currentPin ? `Source ${currentPin}` : "Untracked source"} - + + + + + + {currentPin ? `Source pin ${currentPin}` : "No source pin tracked"} + ) : null}
@@ -2954,6 +2968,16 @@ function SkillDetailPage({ {detail.starredByCurrentActor ? "Starred" : "Star"} {detail.starCount} + + + + + + Times this skill has been installed or forked. + - ))} - - - -
Attach to agent
@@ -3077,6 +3064,46 @@ function SkillDetailPage({
)}
+ + {/* Sharing scope only surfaces when the viewer can edit it (round 2 #3). + Sits below Attach/Related so the primary action lives at the top + of the rail (round 2 #2). */} +
+
Sharing
+
+ {(["company", "private"] as const).map((scope) => ( + + ))} + +
+