/** * 命令生成模块 — AI 工具适配层 * * P1-9: 重构为统一适配器注册表,支持 14+ AI 工具 * * 将 SpecPow 技能/命令转换为各 AI 工具的原生格式: * - Claude Code → .claude/commands/*.md (namespaced: /specpow:explore) * - Cursor → .cursor/rules/*.mdc (flat: /specpow-explore) * - Copilot → .github/copilot-instructions.md (flat: /specpow-explore) * - CodeBuddy → .codebuddy/commands/*.md * - Codex → .codex/instructions.md * - Gemini → .gemini/instructions.md (namespaced: /specpow:explore) * - Amazon Q → .amazonq/commands/*.md (prefix: @specpow-propose) * - Cline → .cline/rules/*.md * - Continue → .continue/config.md * - Windsurf → .windsurf/rules/*.md * - Trae → .trae/rules/*.md * - Kiro → .kiro/steering/*.md * - Qwen → .qwen/instructions.md * - Kimi → .kimi/instructions.md */ /** P1-9: 扩展的 AI 工具类型 */ export type AITool = 'claude' | 'cursor' | 'copilot' | 'codebuddy' | 'codex' | 'gemini' | 'amazonq' | 'cline' | 'continue' | 'windsurf' | 'trae' | 'kiro' | 'qwen' | 'kimi' | 'copilot-workspace' | 'roo' | 'auggie' | 'bob' | 'crush' | 'devin' | 'junie' | 'qoder'; /** P1-9: 调用风格 */ export type InvocationStyle = 'namespaced' | 'flat' | 'prefix'; export interface CommandDefinition { name: string; description: string; prompt: string; category: 'planning' | 'execution' | 'quality' | 'business'; } export interface ToolAdapter { tool: AITool; installDir: string; /** P1-9: 调用风格(用于生成命令名称) */ invocationStyle?: InvocationStyle; installCommands(commands: CommandDefinition[]): void; uninstallCommands(): void; } /** * 适配器注册表 — 统一管理所有 AI 工具适配器 * * 支持动态注册自定义适配器,替代硬编码的 switch-case 工厂函数 */ export declare class AdapterRegistry { private static adapters; /** * 注册适配器 */ static register(toolId: string, adapterClass: new (projectRoot: string) => ToolAdapter): void; /** * 获取适配器实例 */ static get(toolId: string, projectRoot: string): ToolAdapter; /** * 列出所有已注册的适配器 ID */ static list(): string[]; /** * 检查适配器是否已注册 */ static has(toolId: string): boolean; /** * 获取所有已注册适配器的实例列表 */ static getAll(projectRoot: string): ToolAdapter[]; } /** * 通用基类:将命令写入独立 Markdown 文件的适配器 * 子类只需指定 installDir 和 fileExt */ declare abstract class MarkdownFileAdapter implements ToolAdapter { abstract tool: AITool; installDir: string; invocationStyle?: InvocationStyle; constructor(projectRoot: string); /** 文件扩展名,默认 '.md' */ protected get fileExt(): string; /** 生成文件内容,子类可覆盖以定制格式 */ protected formatContent(cmd: CommandDefinition): string; installCommands(commands: CommandDefinition[]): void; uninstallCommands(): void; } /** * P1-9: 单文件聚合适配器基类 * 适用于使用单一文件存放所有命令的工具(如 Codex, Gemini, Qwen, Kimi) */ declare abstract class SingleFileAdapter implements ToolAdapter { abstract tool: AITool; installDir: string; invocationStyle?: InvocationStyle; protected fileName: string; constructor(projectRoot: string); installCommands(commands: CommandDefinition[]): void; uninstallCommands(): void; } export declare class ClaudeAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class CursorAdapter implements ToolAdapter { tool: AITool; installDir: string; invocationStyle: InvocationStyle; constructor(projectRoot: string); installCommands(commands: CommandDefinition[]): void; uninstallCommands(): void; } export declare class CodeBuddyAdapter extends MarkdownFileAdapter { tool: AITool; constructor(projectRoot: string); } export declare class CopilotAdapter implements ToolAdapter { tool: AITool; installDir: string; invocationStyle: InvocationStyle; constructor(projectRoot: string); installCommands(commands: CommandDefinition[]): void; uninstallCommands(): void; } export declare class CodexAdapter extends SingleFileAdapter { tool: AITool; constructor(projectRoot: string); } export declare class GeminiAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class CopilotWorkspaceAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class RooAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class AuggieAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class BobAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class CrushAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class DevinAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class JunieAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class QoderAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class AmazonQAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); /** Amazon Q 使用 @prefix 调用风格 */ protected formatContent(cmd: CommandDefinition): string; } export declare class ClineAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class ContinueAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class WindsurfAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class TraeAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class KiroAdapter extends MarkdownFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); /** Kiro steering 文件使用特定格式 */ protected formatContent(cmd: CommandDefinition): string; } export declare class QwenAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } export declare class KimiAdapter extends SingleFileAdapter { tool: AITool; invocationStyle: InvocationStyle; constructor(projectRoot: string); } /** * 根据 AI 工具类型创建对应的适配器 * P1-9: 委托给 AdapterRegistry,保持向后兼容 */ export declare function createAdapter(tool: AITool, projectRoot: string): ToolAdapter; export {}; //# sourceMappingURL=index.d.ts.map