11import 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' ;
33import MemoryDetail from './MemoryDetail.js' ;
44import { useI18n } from '../i18n/index.js' ;
55import { 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