import { Skill } from "@earendil-works/pi-coding-agent"; import { SkillSourceContribution } from "@agimon-ai/doompi-core/skills"; //#region src/services/skillCatalog/index.d.ts export type SkillGroupKey = 'extensions' | 'help' | 'plugins' | 'default'; export interface SkillEntry { name: string; description: string; filePath: string; baseDir: string; group: SkillGroupKey; /** Package name for an extension, plugin directory name, or `.claude/skills`. */ owner: string; modelInvocable: boolean; /** * What removing this skill would save from the `` block. * * Marginal rather than proportional: the block has fixed framing that no * single skill pays for, so the useful figure is what actually goes away. * Bodies are excluded because they load on demand and are not a resting cost. */ promptTokens?: number; } export interface SkillOwnerNode { owner: string; skills: SkillEntry[]; } export interface SkillGroup { key: SkillGroupKey; label: string; owners: SkillOwnerNode[]; } export interface SkillCatalog { groups: SkillGroup[]; skillCount: number; /** Tokens the `` prompt block costs on every request. */ promptTokens: number; /** Tokens every loaded SKILL.md costs in full, if all of them were read. */ bodyTokens: number; /** Frontmatter and read failures, surfaced instead of thrown. */ diagnostics: string[]; } export interface SkillCatalogOptions { repoRoot: string; /** Exact files the current selection resolved to, from `HarnessState.skillDirectories`. */ activeSkillDirectories: readonly string[]; extensionSources: readonly SkillSourceContribution[]; /** Activation-gated wrappers already accepted by the merged active-skill view. */ helpSkills?: readonly Skill[]; /** Bounded Help activation and collision diagnostics. */ helpDiagnostics?: readonly string[]; } export declare function counter(): Promise<(text: string) => number>; /** * Every skill this session actually loaded, grouped by where it comes from, * priced in tokens. * * Discovery runs over `loadSkillsFromDir` from Pi rather than the harness's own * walker so the listing matches what Pi would load, including its ignore-file * handling; the same skills are then handed to Pi's `formatSkillsForPrompt` so * the always-on figure is the real prompt block rather than a reconstruction of * it. */ export declare function buildSkillCatalog(options: SkillCatalogOptions): Promise; //#endregion //# sourceMappingURL=index.d.mts.map