]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/blob
c650318adb06188be01f479d7621a20396b8c73d
[pkg/ggml/sources/llama.cpp] /
1 <script lang="ts">
2 import { parseGrepSearchMeta } from './parsers/grep-search';
3 import ToolCallBlock from './ToolCallBlock.svelte';
4 import { XCircle } from '@lucide/svelte';
5 import { toolsStore } from '$lib/stores/tools.svelte';
6 import type { AgenticSection } from '$lib/types';
7 import { abbreviateHome } from '$lib/utils';
8
9 interface Props {
10 section: AgenticSection;
11 open: boolean;
12 isStreaming: boolean;
13 onToggle?: () => void;
14 }
15
16 let { isStreaming, onToggle, open, section }: Props = $props();
17
18 const grepMeta = $derived(parseGrepSearchMeta(section));
19 const home = $derived(toolsStore.serverHome);
20 </script>
21
22 <ToolCallBlock {section} {open} {isStreaming} meta={grepMeta} {onToggle}>
23 {#snippet titleSnippet()}
24 {#if grepMeta}
25 <span class="text-muted-foreground">Search for&nbsp;</span>
26 <span class="font-mono">{grepMeta.pattern}</span>
27 <span class="text-muted-foreground">&nbsp;in&nbsp;</span>
28 <span class="font-mono" title={grepMeta.path}>{abbreviateHome(grepMeta.path, home)}</span>
29 {/if}
30 {/snippet}
31
32 {#snippet children(meta, ctx)}
33 {#if ctx.isPending}
34 <div class="rounded bg-muted/20 p-2 text-xs text-muted-foreground/70 italic">
35 Searching...
36 </div>
37 {:else if meta?.errorMessage}
38 <div
39 class="flex items-start gap-2 rounded bg-red-500/10 p-2 text-xs text-red-600 italic dark:text-red-400"
40 >
41 <XCircle class="mt-0.5 h-3 w-3 shrink-0" />
42 <span>{meta.errorMessage}</span>
43 </div>
44 {:else if meta && meta.matches.length > 0}
45 <div class="max-h-96 overflow-auto">
46 {#each meta.matches as match, mi (mi)}
47 <div class="font-mono text-[11px] leading-relaxed">
48 <span class="text-muted-foreground/70">{match.file}</span>
49 {#if meta.showLineNumbers && match.line != null}
50 <span class="text-muted-foreground/70">:{match.line}</span>
51 {/if}
52 <span class="text-muted-foreground/70">:</span>
53 <span>{match.content}</span>
54 </div>
55 {/each}
56 </div>
57 <div class="mt-1.5 text-xs text-muted-foreground/70 italic">
58 Total matches: <span class="font-mono">{meta.totalMatches ?? meta.matches.length}</span>
59 {#if meta.showLineNumbers}
60 &nbsp;<span class="italic">(with line numbers)</span>
61 {/if}
62 </div>
63 {:else}
64 <div class="text-xs text-muted-foreground/70 italic">No matches</div>
65 <div class="mt-1.5 text-xs text-muted-foreground/70 italic">
66 Total matches: <span class="font-mono">{meta?.totalMatches ?? 0}</span>
67 </div>
68 {/if}
69 {/snippet}
70 </ToolCallBlock>