import type { SkillGraph } from './shared.js'; import type { InstallSkillCandidate, NativeSkillGroup, SkillRow, SkillsNavIntent, StatusMessage } from './types.js'; interface SkillLibraryTabProps { skills: SkillRow[]; nativeSkillGroups: NativeSkillGroup[]; installSource: string; installPath: string; installRef: string; installFullDepth: boolean; installStatus: StatusMessage; installBusy: boolean; installDiscovering: boolean; installSelectionOpen: boolean; installCandidates: InstallSkillCandidate[]; selectedInstallSkills: Set; onInstallSourceChange: (v: string) => void; onInstallPathChange: (v: string) => void; onInstallRefChange: (v: string) => void; onInstallFullDepthChange: (v: boolean) => void; onToggleInstallSkill: (name: string) => void; onSelectAllInstallSkills: (selected: boolean) => void; onConfirmInstallSelection: () => Promise; onCloseInstallSelection: () => void; onInstall: () => Promise; onOpenNativeDiscovery: () => void; onCreatePack: (input: { id: string; name: string; skillNames: string[]; }) => Promise; InstallPanel: React.ComponentType; InstalledLibrary: React.ComponentType; RemoveDialog: React.ComponentType; removingNames: Set; removalDialogOpen: boolean; pendingRemoval: string[] | null; removalReferences: Array<{ name: string; bots: string[]; }>; removalError: string | null; skillBusy: string | null; installedStatus: StatusMessage; onUpdateSkill: (name: string) => void; onRequestRemove: (names: string[]) => void; onCancelRemoval: () => void; onConfirmRemoval: (force: boolean) => void; /** cross-tab navigation context (consumed once on arrival) */ navIntent?: SkillsNavIntent | null; onNavIntentConsumed?: () => void; /** missing skill the user came here to install — prefill only, never auto-install */ installTargetSkill?: string | null; /** clear the sticky target shown above the single-page install form */ onClearInstallTarget?: () => void; /** false = pack data never loaded; usage chips must not claim "0 packs" */ packsKnown?: boolean; /** focus the install form for a referenced-but-missing skill */ onInstallMissing?: (name: string) => void; graph?: SkillGraph; packNames?: Array<{ id: string; name: string; }>; onShowSkillPacks?: (name: string) => void; onShowSkillBots?: (name: string) => void; /** single-skill install finished: show a toast with a "assign to bot" action */ onAssignInstalledSkill?: (skillName: string) => void; } export declare function SkillLibraryTab(props: SkillLibraryTabProps): import("react").JSX.Element; /** Visual hint only — the daemon's parseSkillInstallSource() owns the real * classification. Kept deliberately in sync with it so the wizard never * promises a source type the backend would reject. Note this is a *hint*: a * bare `owner/repo` that also exists as a local directory installs from disk, * which only the daemon (with filesystem access) can know. */ export declare function detectSourceType(source: string): 'github' | 'git' | 'local' | 'agentbuddy' | 'unknown'; export {}; //# sourceMappingURL=skill-library-tab.d.ts.map