UNPKG

aiwg

Version:

Deployment tool and support utility for AI context. Copies agents, skills, commands, rules, and behaviors into the paths each AI platform reads (Claude Code, Codex, Copilot, Cursor, Warp, OpenClaw, and 6 more) so one source of truth works across 10 platfo

174 lines 5.07 kB
/** * CapabilityIndex - Capability-based extension discovery system * * @implements @.aiwg/requirements/use-cases/UC-004-extension-system.md * @architecture @.aiwg/architecture/software-architecture-doc.md * @tests @test/unit/extensions/capability-index.test.ts */ import type { Extension } from './types.js'; /** * Query structure for capability-based extension search */ export interface CapabilityQuery { /** Find extensions with ALL these capabilities */ all?: string[]; /** Find extensions with ANY of these capabilities */ any?: string[]; /** Exclude extensions with these capabilities */ not?: string[]; /** Filter by extension type */ type?: string; } /** * CapabilityIndex enables finding extensions by what they can do. * * Maintains bidirectional mappings: * - capability → extension IDs (for queries) * - extension ID → capabilities (for updates) * * @example * ```typescript * const index = new CapabilityIndex(); * index.index(myExtension); * * // Find extensions that can format markdown * const formatters = index.getByCapability('format:markdown'); * * // Find extensions that can format OR lint * const tools = index.query({ any: ['format:markdown', 'lint:markdown'] }); * * // Find formatters that are NOT linters * const pureFormatters = index.query({ * all: ['format:markdown'], * not: ['lint:markdown'] * }); * ``` */ export declare class CapabilityIndex { /** Map of capability → extension IDs */ private byCapability; /** Map of extension ID → capabilities */ private byExtension; /** Map of extension ID → extension type */ private extensionTypes; /** * Index an extension's capabilities for fast lookup. * * @param extension - Extension to index * * @example * ```typescript * index.index({ * id: 'markdown-formatter', * type: 'tool', * capabilities: ['format:markdown', 'format:commonmark'] * }); * ``` */ index(extension: Extension): void; /** * Remove an extension from the index. * * @param extensionId - ID of extension to remove * * @example * ```typescript * index.remove('markdown-formatter'); * ``` */ remove(extensionId: string): void; /** * Query extensions by capabilities. * * Query logic: * 1. Start with all extensions if no `all` or `any` specified * 2. Filter to extensions with ALL capabilities in `all` array * 3. Filter to extensions with ANY capability in `any` array * 4. Exclude extensions with capabilities in `not` array * 5. Optionally filter by extension type * * @param query - Capability query * @returns Array of matching extension IDs * * @example * ```typescript * // Extensions that can do BOTH formatting and validation * index.query({ all: ['format:markdown', 'validate:markdown'] }); * * // Extensions that can do EITHER formatting or linting * index.query({ any: ['format:markdown', 'lint:markdown'] }); * * // Formatters that are NOT linters * index.query({ * all: ['format:markdown'], * not: ['lint:markdown'] * }); * * // Only tool-type extensions with formatting capability * index.query({ * all: ['format:markdown'], * type: 'tool' * }); * ``` */ query(query: CapabilityQuery): string[]; /** * Get all capabilities in the index. * * @returns Sorted array of capability strings * * @example * ```typescript * const capabilities = index.getAllCapabilities(); * // ['format:markdown', 'lint:markdown', 'validate:markdown'] * ``` */ getAllCapabilities(): string[]; /** * Get all extensions with a specific capability. * * @param capability - Capability to search for * @returns Sorted array of extension IDs * * @example * ```typescript * const formatters = index.getByCapability('format:markdown'); * // ['markdown-formatter', 'prettier-markdown'] * ``` */ getByCapability(capability: string): string[]; /** * Check if a capability exists in the index. * * @param capability - Capability to check * @returns True if at least one extension has this capability * * @example * ```typescript * if (index.hasCapability('format:markdown')) { * console.log('Markdown formatting available'); * } * ``` */ hasCapability(capability: string): boolean; /** * Get the number of unique capabilities in the index. * * @example * ```typescript * console.log(`Indexed ${index.capabilityCount} capabilities`); * ``` */ get capabilityCount(): number; /** * Clear all indexed data. * * @example * ```typescript * index.clear(); * // All mappings reset * ``` */ clear(): void; } //# sourceMappingURL=capability-index.d.ts.map