-
{s.input_type}
- {#if s.profile}
-
{s.profile}
- {/if}
-
· {fmtDate(s.started_at)}
+
+
+
+
+ {#each [INPUT_TYPE_ICON[s.input_type] ?? FileText] as Icon}
+
+ {/each}
+
+
+
+
+
{s.target}
+
+ {s.input_type}
+ {#if s.profile}
+ {s.profile}
+ {/if}
+ · {fmtDate(s.started_at)}
+ {#if s.status !== "running"}
+ {@const total = (s.planned_tools ?? []).reduce((sum, t) => sum + (t.result_count ?? 0), 0)}
+ {#if total > 0}
+ · {total} result{total !== 1 ? "s" : ""}
+ {/if}
+ {/if}
+
+
+
+
+
+
+ {#if s.status === "running"}
+
+ {/if}
+ {s.status}
+
+
-
- {#if s.status !== "running"}
- {@const total = (s.planned_tools ?? []).reduce((sum, t) => sum + (t.result_count ?? 0), 0)}
- {#if total > 0}
-
{total} result{total !== 1 ? "s" : ""}
- {/if}
- {/if}
-
-
- {#if s.status === "running"}
-
- {/if}
- {s.status}
-
-
-
{/each}
diff --git a/front/src/components/ToolList.svelte b/front/src/components/ToolList.svelte
index 1167152..99846d3 100644
--- a/front/src/components/ToolList.svelte
+++ b/front/src/components/ToolList.svelte
@@ -15,6 +15,7 @@
let error = $state("");
let selectedInputType = $state("all");
+ let nameFilter = $state("");
const inputTypeOptions = ["all", ...INPUT_TYPES];
@@ -47,11 +48,14 @@
);
let visibleTools = $derived(
- selectedInputType === "all"
- ? toolsWithStatus
- : toolsWithStatus.filter((t) =>
- t.input_types.includes(selectedInputType),
- ),
+ toolsWithStatus.filter((t) => {
+ const matchesInput =
+ selectedInputType === "all" || t.input_types.includes(selectedInputType);
+ const matchesName =
+ nameFilter.trim() === "" ||
+ t.name.toLowerCase().includes(nameFilter.trim().toLowerCase());
+ return matchesInput && matchesName;
+ }),
);
let active = $derived(
@@ -170,6 +174,19 @@
{:else}