import { AppShell } from "@/components/AppShell"; import type { ProjectResponse, SkillView } from "@/lib/api/types"; import { groupByScope, scopeLabel, tierLabel } from "@/lib/skills/skills"; interface SkillsPageProps { project: ProjectResponse; skills: SkillView[]; } // 技能库(UX §7):只读注册表视图(name/scope/tier/reads/writes)。Server Component(纯读)。 export function SkillsPage({ project, skills }: SkillsPageProps) { const groups = groupByScope(skills); return (

技能库

声明式 Skill 注册表:每个技能声明能力档位与可读/写的表(沙箱白名单,越权产出丢弃并审计)。

{groups.length === 0 ? (

(暂无已注册技能)

) : ( groups.map((group) => (

{scopeLabel(group.scope)} {group.skills.length}

    {group.skills.map((skill) => (
  • {skill.name} {tierLabel(skill.tier)} {skill.genre ? ( {skill.genre} ) : null}
    读: {skill.reads && skill.reads.length > 0 ? skill.reads.join("、") : "—"} 写: {skill.writes && skill.writes.length > 0 ? skill.writes.join("、") : "—"}
  • ))}
)) )}
); }