@@ -1576,3 +1576,69 @@ describe('transformBlockTool multi-instance unique IDs', () => {
15761576 expect ( result ?. id ) . toBe ( 'table_query_rows' )
15771577 } )
15781578} )
1579+
1580+ describe ( 'transformBlockTool knowledge-base multi-instance unique IDs' , ( ) => {
1581+ const knowledgeBlockDef = {
1582+ type : 'knowledge' ,
1583+ inputs : { } ,
1584+ subBlocks : [
1585+ { id : 'operation' , type : 'dropdown' } ,
1586+ {
1587+ id : 'knowledgeBaseSelector' ,
1588+ type : 'knowledge-base-selector' ,
1589+ canonicalParamId : 'knowledgeBaseId' ,
1590+ mode : 'basic' ,
1591+ } ,
1592+ {
1593+ id : 'manualKnowledgeBaseId' ,
1594+ type : 'short-input' ,
1595+ canonicalParamId : 'knowledgeBaseId' ,
1596+ mode : 'advanced' ,
1597+ } ,
1598+ ] ,
1599+ tools : {
1600+ access : [ 'knowledge_search' , 'knowledge_upload_chunk' ] ,
1601+ config : { tool : ( ) => 'knowledge_search' } ,
1602+ } ,
1603+ }
1604+
1605+ const getAllBlocks = ( ) => [ knowledgeBlockDef ]
1606+ const getTool = ( id : string ) => ( {
1607+ id,
1608+ name : 'Search' ,
1609+ description : 'Search the knowledge base' ,
1610+ params : { } ,
1611+ } )
1612+
1613+ const transformKb = (
1614+ params : Record < string , unknown > ,
1615+ canonicalModes ?: Record < string , 'basic' | 'advanced' >
1616+ ) =>
1617+ transformBlockTool (
1618+ { type : 'knowledge' , operation : 'search' , params } ,
1619+ { selectedOperation : 'search' , getAllBlocks, getTool, canonicalModes }
1620+ )
1621+
1622+ it ( 'appends the knowledge base id when stored under the basic selector subblock key' , async ( ) => {
1623+ const result = await transformKb ( { knowledgeBaseSelector : 'kb_abc' } )
1624+ expect ( result ?. id ) . toBe ( 'knowledge_search_kb_abc' )
1625+ } )
1626+
1627+ it ( 'appends the knowledge base id resolved from the advanced manual input' , async ( ) => {
1628+ const result = await transformKb (
1629+ { manualKnowledgeBaseId : 'kb_xyz' } ,
1630+ { 'knowledge:knowledgeBaseId' : 'advanced' }
1631+ )
1632+ expect ( result ?. id ) . toBe ( 'knowledge_search_kb_xyz' )
1633+ } )
1634+
1635+ it ( 'appends the canonical knowledge base id when already present in params' , async ( ) => {
1636+ const result = await transformKb ( { knowledgeBaseId : 'kb_direct' } )
1637+ expect ( result ?. id ) . toBe ( 'knowledge_search_kb_direct' )
1638+ } )
1639+
1640+ it ( 'falls back to the base tool id when no knowledge base is selected' , async ( ) => {
1641+ const result = await transformKb ( { } )
1642+ expect ( result ?. id ) . toBe ( 'knowledge_search' )
1643+ } )
1644+ } )
0 commit comments