@@ -31,10 +31,13 @@ import {
3131 Popover ,
3232 PopoverContent ,
3333 PopoverTrigger ,
34+ Slider ,
35+ StandardTooltip ,
3436} from "@src/components/ui"
3537import { useRooPortal } from "@src/components/ui/hooks/useRooPortal"
3638import type { EmbedderProvider } from "@roo/embeddingModels"
3739import type { IndexingStatus } from "@roo/ExtensionMessage"
40+ import { CODEBASE_INDEX_DEFAULTS } from "@roo-code/types"
3841
3942interface CodeIndexPopoverProps {
4043 children : React . ReactNode
@@ -48,6 +51,7 @@ interface LocalCodeIndexSettings {
4851 codebaseIndexEmbedderProvider : EmbedderProvider
4952 codebaseIndexEmbedderBaseUrl ?: string
5053 codebaseIndexEmbedderModelId : string
54+ codebaseIndexSearchMaxResults ?: number
5155
5256 // Secret settings (start empty, will be loaded separately)
5357 codeIndexOpenAiKey ?: string
@@ -66,6 +70,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
6670 const { t } = useAppTranslation ( )
6771 const { codebaseIndexConfig, codebaseIndexModels } = useExtensionState ( )
6872 const [ open , setOpen ] = useState ( false )
73+ const [ isAdvancedSettingsOpen , setIsAdvancedSettingsOpen ] = useState ( false )
6974
7075 const [ indexingStatus , setIndexingStatus ] = useState < IndexingStatus > ( externalIndexingStatus )
7176
@@ -79,6 +84,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
7984 codebaseIndexEmbedderProvider : "openai" ,
8085 codebaseIndexEmbedderBaseUrl : "" ,
8186 codebaseIndexEmbedderModelId : "" ,
87+ codebaseIndexSearchMaxResults : CODEBASE_INDEX_DEFAULTS . DEFAULT_SEARCH_RESULTS ,
8288 codeIndexOpenAiKey : "" ,
8389 codeIndexQdrantApiKey : "" ,
8490 codebaseIndexOpenAiCompatibleBaseUrl : "" ,
@@ -107,6 +113,8 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
107113 codebaseIndexEmbedderProvider : codebaseIndexConfig . codebaseIndexEmbedderProvider || "openai" ,
108114 codebaseIndexEmbedderBaseUrl : codebaseIndexConfig . codebaseIndexEmbedderBaseUrl || "" ,
109115 codebaseIndexEmbedderModelId : codebaseIndexConfig . codebaseIndexEmbedderModelId || "" ,
116+ codebaseIndexSearchMaxResults :
117+ codebaseIndexConfig . codebaseIndexSearchMaxResults || CODEBASE_INDEX_DEFAULTS . DEFAULT_SEARCH_RESULTS ,
110118 codeIndexOpenAiKey : "" ,
111119 codeIndexQdrantApiKey : "" ,
112120 codebaseIndexOpenAiCompatibleBaseUrl : "" ,
@@ -575,6 +583,65 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
575583 />
576584 </ div >
577585
586+ { /* Advanced Settings Disclosure */ }
587+ < div className = "mt-4" >
588+ < button
589+ onClick = { ( ) => setIsAdvancedSettingsOpen ( ! isAdvancedSettingsOpen ) }
590+ className = "flex items-center text-xs text-vscode-foreground hover:text-vscode-textLink-foreground focus:outline-none"
591+ aria-expanded = { isAdvancedSettingsOpen } >
592+ < span
593+ className = { `codicon codicon-${ isAdvancedSettingsOpen ? "chevron-down" : "chevron-right" } mr-1` } > </ span >
594+ < span > { t ( "settings:codeIndex.advancedConfigLabel" ) } </ span >
595+ </ button >
596+
597+ { isAdvancedSettingsOpen && (
598+ < div className = "mt-4 space-y-4 pl-4" >
599+ { /* Maximum Search Results Slider */ }
600+ < div className = "space-y-2" >
601+ < div className = "flex items-center gap-2" >
602+ < label className = "text-sm font-medium" >
603+ { t ( "settings:codeIndex.searchMaxResultsLabel" ) }
604+ </ label >
605+ < StandardTooltip content = { t ( "settings:codeIndex.searchMaxResultsDescription" ) } >
606+ < span className = "codicon codicon-info text-xs text-vscode-descriptionForeground cursor-help" />
607+ </ StandardTooltip >
608+ </ div >
609+ < div className = "flex items-center gap-2" >
610+ < Slider
611+ min = { CODEBASE_INDEX_DEFAULTS . MIN_SEARCH_RESULTS }
612+ max = { CODEBASE_INDEX_DEFAULTS . MAX_SEARCH_RESULTS }
613+ step = { CODEBASE_INDEX_DEFAULTS . SEARCH_RESULTS_STEP }
614+ value = { [
615+ currentSettings . codebaseIndexSearchMaxResults ||
616+ CODEBASE_INDEX_DEFAULTS . DEFAULT_SEARCH_RESULTS ,
617+ ] }
618+ onValueChange = { ( values ) =>
619+ updateSetting ( "codebaseIndexSearchMaxResults" , values [ 0 ] )
620+ }
621+ className = "flex-1"
622+ data-testid = "search-max-results-slider"
623+ />
624+ < span className = "w-12 text-center" >
625+ { currentSettings . codebaseIndexSearchMaxResults ||
626+ CODEBASE_INDEX_DEFAULTS . DEFAULT_SEARCH_RESULTS }
627+ </ span >
628+ < VSCodeButton
629+ appearance = "icon"
630+ title = { t ( "settings:codeIndex.resetToDefault" ) }
631+ onClick = { ( ) =>
632+ updateSetting (
633+ "codebaseIndexSearchMaxResults" ,
634+ CODEBASE_INDEX_DEFAULTS . DEFAULT_SEARCH_RESULTS ,
635+ )
636+ } >
637+ < span className = "codicon codicon-discard" />
638+ </ VSCodeButton >
639+ </ div >
640+ </ div >
641+ </ div >
642+ ) }
643+ </ div >
644+
578645 { /* Action Buttons */ }
579646 < div className = "flex items-center justify-between gap-2 pt-2" >
580647 < div className = "flex gap-2" >
0 commit comments