Skip to content

Commit 71279f4

Browse files
committed
feat: memory browser agent filter
- Add agent dropdown to memory browser toolbar - Filter both list and search modes by agent_id - Default shows all agents
1 parent 8b91673 commit 71279f4

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

packages/dashboard/src/pages/MemoryBrowser.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect, useState, useCallback } from 'react';
2-
import { listMemories, createMemory, updateMemory, deleteMemory, search, triggerImport } from '../api/client.js';
2+
import { listMemories, createMemory, updateMemory, deleteMemory, search, triggerImport, listAgents } from '../api/client.js';
33
import MemoryDetail from './MemoryDetail.js';
44
import { useI18n } from '../i18n/index.js';
55
import { toLocal } from '../utils/time.js';
@@ -30,6 +30,8 @@ export default function MemoryBrowser() {
3030
const [total, setTotal] = useState(0);
3131
const [layer, setLayer] = useState('');
3232
const [category, setCategory] = useState('');
33+
const [agentFilter, setAgentFilter] = useState('');
34+
const [agents, setAgents] = useState<any[]>([]);
3335
const [searchQuery, setSearchQuery] = useState('');
3436
const [isSearchMode, setIsSearchMode] = useState(false);
3537
const [sortField, setSortField] = useState<SortField>('created_at');
@@ -63,6 +65,7 @@ export default function MemoryBrowser() {
6365
// Apply client-side filters
6466
if (layer) results = results.filter(m => m.layer === layer);
6567
if (category) results = results.filter(m => m.category === category);
68+
if (agentFilter) results = results.filter(m => m.agent_id === agentFilter);
6669
// Sort
6770
results.sort((a: any, b: any) => {
6871
const va = a[sortField] ?? 0;
@@ -77,6 +80,7 @@ export default function MemoryBrowser() {
7780
const params: Record<string, string> = { limit: String(limit), offset: String(page * limit) };
7881
if (layer) params.layer = layer;
7982
if (category) params.category = category;
83+
if (agentFilter) params.agent_id = agentFilter;
8084
listMemories(params).then((r: any) => {
8185
let items = r.items as Memory[];
8286
if (sortField !== 'created_at' || sortDir !== 'desc') {
@@ -91,9 +95,10 @@ export default function MemoryBrowser() {
9195
setTotal(r.total);
9296
});
9397
}
94-
}, [layer, category, page, searchQuery, isSearchMode, sortField, sortDir]);
98+
}, [layer, category, agentFilter, page, searchQuery, isSearchMode, sortField, sortDir]);
9599

96100
useEffect(() => { load(); }, [load]);
101+
useEffect(() => { listAgents().then((res: any) => setAgents(res.agents || [])).catch(() => {}); }, []);
97102

98103
const handleSearch = () => {
99104
if (searchQuery.trim()) {
@@ -282,6 +287,10 @@ export default function MemoryBrowser() {
282287
<option value="">{t('memories.allCategories')}</option>
283288
{CATEGORIES.map(c => <option key={c} value={c}>{c}</option>)}
284289
</select>
290+
<select value={agentFilter} onChange={e => { setAgentFilter(e.target.value); setPage(0); }}>
291+
<option value="">All Agents</option>
292+
{agents.map((a: any) => <option key={a.id} value={a.id}>{a.name || a.id}</option>)}
293+
</select>
285294
<div style={{ display: 'flex', gap: 4, marginLeft: 8 }}>
286295
{(['created_at', 'importance', 'decay_score', 'access_count'] as SortField[]).map(f => (
287296
<button

0 commit comments

Comments
 (0)