/** * Skill registry — resolves name conflicts across sources and exposes * lookup, list, and shadow-set queries for `/help` and * `franklin skills list`. * * Precedence: project > user > learned > bundled. Within the same source, the first * loaded skill wins so that the order returned by the loader (which is * filesystem-ordered) is the deterministic tiebreaker the user can rely on. * * Built-in slash commands (e.g. `/security`) take precedence over skills * with the same name, but that check happens at the dispatch layer in * `src/agent/commands.ts`. The registry never sees the built-in list. */ import type { LoadedSkill } from './types.js'; export interface ShadowEntry { winner: LoadedSkill; loser: LoadedSkill; } export declare class Registry { private readonly byName; private readonly shadows; static fromLoaded(loaded: LoadedSkill[]): Registry; lookup(name: string): LoadedSkill | undefined; list(): LoadedSkill[]; shadowed(): ShadowEntry[]; }