(
root: string,
query: string,
preferredBackend: VaultTextSearchBackendPreference = 'auto',
rawPaths: VaultTextSearchToolPaths = {},
limit = 80
)
| 2588 | } |
| 2589 | |
| 2590 | export async function searchVaultText( |
| 2591 | root: string, |
| 2592 | query: string, |
| 2593 | preferredBackend: VaultTextSearchBackendPreference = 'auto', |
| 2594 | rawPaths: VaultTextSearchToolPaths = {}, |
| 2595 | limit = 80 |
| 2596 | ): Promise<VaultTextSearchMatch[]> { |
| 2597 | const trimmed = query.trim() |
| 2598 | if (!trimmed) return [] |
| 2599 | const paths = normalizeVaultTextSearchToolPaths(rawPaths) |
| 2600 | const capabilities = await searchVaultTextCapabilities(paths) |
| 2601 | const backend = resolveSearchBackend(preferredBackend, capabilities) |
| 2602 | |
| 2603 | if (backend === 'builtin') { |
| 2604 | const candidates = await getCachedVaultTextSearchCandidates(root, 'builtin', paths, () => |
| 2605 | collectBuiltinSearchCandidates(root) |
| 2606 | ) |
| 2607 | const ranked = rankSearchCandidates(trimmed, candidates, limit) |
| 2608 | return await hydrateSearchOffsets(root, trimmed, ranked) |
| 2609 | } |
| 2610 | |
| 2611 | if (backend === 'ripgrep') { |
| 2612 | const candidates = await getCachedVaultTextSearchCandidates(root, 'ripgrep', paths, () => |
| 2613 | collectRipgrepSearchCandidates(root, paths) |
| 2614 | ) |
| 2615 | const ranked = rankSearchCandidates( |
| 2616 | trimmed, |
| 2617 | candidates, |
| 2618 | limit |
| 2619 | ) |
| 2620 | return await hydrateSearchOffsets(root, trimmed, ranked) |
| 2621 | } |
| 2622 | |
| 2623 | const candidates = capabilities.ripgrep |
| 2624 | ? await getCachedVaultTextSearchCandidates(root, 'ripgrep', paths, () => |
| 2625 | collectRipgrepSearchCandidates(root, paths) |
| 2626 | ) |
| 2627 | : await getCachedVaultTextSearchCandidates(root, 'builtin', paths, () => |
| 2628 | collectBuiltinSearchCandidates(root) |
| 2629 | ) |
| 2630 | const ranked = await runFzfSearch(trimmed, candidates, limit, paths) |
| 2631 | return await hydrateSearchOffsets(root, trimmed, ranked) |
| 2632 | } |
| 2633 | |
| 2634 | function resolveSafe(root: string, rel: string): string { |
| 2635 | const abs = path.resolve(root, rel) |
no test coverage detected