/** * Row shapes for the plugin listings, shared by every surface that prints one. * * `/plugin list`, `SearchPlugins` and `ListPlugins` describe the same objects, * and each used to build its own `name [a, b] — description` string, so the same * plugin printed three ways and the model's view never quite matched the user's. * They all go through here now; only the styling and the width differ. */ import type { ListGroup, ListRow } from "../../format-list.js"; import type { AvailablePlugin } from "./install.js"; import type { NormalizedPlugin } from "./manifest.js"; /** Human-readable source for an available plugin (a URL, a path, an npm spec). */ export declare function formatPluginSource(source: AvailablePlugin["source"]): string; /** * Capability classes a plugin actually ships. * * Covers every capability `NormalizedPlugin` can carry — themes and providers * included, which the old `ListPlugins` inline list omitted, so a plugin that * shipped only a theme or only a provider reported no capabilities at all. */ export declare function pluginCapabilities(plugin: NormalizedPlugin): string[]; /** * Available plugins, grouped by the marketplace offering them. * * Grouping is what makes provenance legible: a flat list cannot answer "where * would this come from if I installed it", which is the one question that * matters at a trust boundary. Marketplace order is preserved from the caller. */ export declare function availablePluginGroups(plugins: readonly AvailablePlugin[], options?: { installed?: ReadonlySet; }): ListGroup[]; export interface InstalledRowOptions { /** Working directory, used to place each plugin in a scope. */ cwd?: string; /** Whether `cwd` is a trusted workspace; decides if executables actually load. */ trusted?: boolean; } /** Installed plugins as rows: id@version, platforms, format, scope, capabilities. */ export declare function installedPluginRows(plugins: readonly NormalizedPlugin[], options?: InstalledRowOptions): ListRow[]; //# sourceMappingURL=listing.d.ts.map