From a151e4618c57cb5d777c9fcbfcf120117303f2f6 Mon Sep 17 00:00:00 2001 From: Dotta Date: Thu, 11 Jun 2026 05:31:20 +0000 Subject: [PATCH] Apply Skills Store detail-page polish from PAP-10882 UX review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three small but board-feedback-grounded fixes on the new full-page skill detail (PAP-10846): - Hide the trust-level (TrustChip) and compatibility (CompatChip) pills from the detail header. Round-1 #8 said trust stays internal in v1; the "Includes scripts" pill was the explicit user-facing surface to remove. Round-2 #1.f also dropped compatibility from the stats redistribution. Source pin moved to a github-icon + tooltip next to the categories. - Add an installs count next to the Star control in the header (Star, N installs, Fork, ...) — round-2 #1.a's redistribution target for the removed stats bar. - Reorder the right rail to Attach to agent → Related skills → Sharing (round-2 #2). Sharing is still rendered on this surface because the control is editable; the read-only scope pill was already absent. Plus one small discovery-grid fallback: - Bundled SKILL.md files with frontmatter-only bodies stored their extracted description as ">" (raw blockquote glyph), which showed up literally on cards. cardDescriptionText() strips leading markdown punctuation and falls through to "No description yet." when nothing meaningful remains. Co-Authored-By: Paperclip --- ui/src/pages/CompanySkills.tsx | 113 ++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 43 deletions(-) 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) => ( + + ))} + +
+