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