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