/** * AST Edit Tool * * Provides AST-aware code transformations for workspace files. * Uses @ast-grep/napi for syntax-aware pattern matching and transforms. * * Requires @ast-grep/napi as an optional peer dependency. */ interface TransformResult { content: string; count: number; error?: string; } interface ImportSpec { module: string; names: string[]; isDefault?: boolean; } /** * Minimal interface for an ast-grep SgNode. * Avoids importing @ast-grep/napi types directly since it's an optional dep. */ interface SgNode { text(): string; range(): { start: { index: number; }; end: { index: number; }; }; findAll(config: { rule: Record; }): SgNode[]; getMatch(name: string): SgNode | null; } /** Minimal interface for the ast-grep Lang enum values. */ type LangValue = unknown; /** The subset of @ast-grep/napi we use after dynamic import. */ interface AstGrepModule { parse(lang: LangValue, content: string): { root(): SgNode; }; Lang: Record; } /** * Try to load @ast-grep/napi. Returns null if not available. * Uses dynamic import to avoid compile-time dependency. * Concurrent callers share the same in-flight promise. */ export declare function loadAstGrep(): Promise; /** * Check if @ast-grep/napi is available without importing it. * Useful for deciding whether to create the tool at registration time. */ export declare function isAstGrepAvailable(): boolean; /** * Map file extension to ast-grep Lang enum. * * Only languages with built-in tree-sitter grammars in @ast-grep/napi are * supported. Python, Go, Rust, etc. require separate @ast-grep/lang-* packages * which are not currently integrated. */ export declare function getLanguageFromPath(filePath: string, Lang: Record): LangValue | null; /** * Add an import statement to the file. * Inserts after the last existing import, or at the beginning if none exist. * If the module is already imported, merges new names into it. */ export declare function addImport(content: string, root: SgNode, importSpec: ImportSpec): string; /** * Remove an import by module name. * Matches against the import source string. */ export declare function removeImport(content: string, root: SgNode, targetName: string): string; /** * Pattern-based replacement using AST metavariables. * Pattern uses $VARNAME placeholders that match any AST node. * Replacement substitutes matched text back in. */ export declare function patternReplace(content: string, root: SgNode, pattern: string, replacement: string): TransformResult; export declare const astEditTool: import("../../tools").Tool<{ path: string; pattern?: string | undefined; replacement?: string | undefined; transform?: "add-import" | "remove-import" | "rename" | undefined; targetName?: string | undefined; newName?: string | undefined; importSpec?: { module: string; names: string[]; isDefault?: boolean | undefined; } | undefined; }, unknown, unknown, unknown, import("../../tools").ToolExecutionContext, "mastra_workspace_ast_edit", unknown>; export {}; //# sourceMappingURL=ast-edit.d.ts.map