@@ -78,6 +78,7 @@ function callBuild(
7878 updateStateType ?: StateType ;
7979 manageSettingsUrl ?: string ;
8080 anonymous ?: boolean ;
81+ canManageModels ?: boolean ;
8182 } = { } ,
8283) : IActionListItem < IActionWidgetDropdownAction > [ ] {
8384 const onSelect = ( ) => { } ;
@@ -96,6 +97,7 @@ function callBuild(
9697 opts . manageSettingsUrl ,
9798 stubCommandService ,
9899 entitlementService ,
100+ opts . canManageModels ?? true ,
99101 ) ;
100102}
101103
@@ -447,6 +449,7 @@ suite('buildModelPickerItems', () => {
447449 undefined ,
448450 stubCommandService ,
449451 stubChatEntitlementService ,
452+ true ,
450453 ) ;
451454 const gptItem = getActionItems ( items ) . find ( a => a . label === 'GPT-4o' ) ;
452455 assert . ok ( gptItem ?. item ) ;
@@ -528,6 +531,7 @@ suite('buildModelPickerItems', () => {
528531 'https://aka.ms/github-copilot-settings' ,
529532 stubCommandService ,
530533 stubChatEntitlementService ,
534+ true ,
531535 ) ;
532536
533537 const adminItem = getActionItems ( items ) . find ( a => a . label === 'Missing Model' ) ;
@@ -591,6 +595,52 @@ suite('buildModelPickerItems', () => {
591595 assert . strictEqual ( disabledItems [ 1 ] . description , undefined ) ;
592596 } ) ;
593597
598+ test ( 'canManageModels true shows Manage Models entry for eligible entitlement' , ( ) => {
599+ const auto = createAutoModel ( ) ;
600+ const modelA = createModel ( 'gpt-4o' , 'GPT-4o' ) ;
601+ const items = callBuild ( [ auto , modelA ] , { canManageModels : true } ) ;
602+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
603+ assert . ok ( manageItem ) ;
604+ } ) ;
605+
606+ test ( 'canManageModels false hides Manage Models entry' , ( ) => {
607+ const auto = createAutoModel ( ) ;
608+ const modelA = createModel ( 'gpt-4o' , 'GPT-4o' ) ;
609+ const items = callBuild ( [ auto , modelA ] , { canManageModels : false } ) ;
610+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
611+ assert . strictEqual ( manageItem , undefined ) ;
612+ } ) ;
613+
614+ test ( 'canManageModels false hides Manage Models for all entitlement tiers' , ( ) => {
615+ const auto = createAutoModel ( ) ;
616+ for ( const entitlement of [ ChatEntitlement . Free , ChatEntitlement . Pro , ChatEntitlement . ProPlus , ChatEntitlement . Business , ChatEntitlement . Enterprise ] ) {
617+ const items = callBuild ( [ auto ] , { canManageModels : false , entitlement } ) ;
618+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
619+ assert . strictEqual ( manageItem , undefined , `Manage Models should be hidden for entitlement ${ entitlement } ` ) ;
620+ }
621+ } ) ;
622+
623+ test ( 'canManageModels true shows Manage Models for empty model list' , ( ) => {
624+ const items = callBuild ( [ ] , { canManageModels : true } ) ;
625+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
626+ assert . ok ( manageItem ) ;
627+ } ) ;
628+
629+ test ( 'canManageModels false hides Manage Models for empty model list' , ( ) => {
630+ const items = callBuild ( [ ] , { canManageModels : false } ) ;
631+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
632+ assert . strictEqual ( manageItem , undefined ) ;
633+ } ) ;
634+
635+ test ( 'canManageModels false also removes trailing separator' , ( ) => {
636+ const auto = createAutoModel ( ) ;
637+ const items = callBuild ( [ auto ] , { canManageModels : false } ) ;
638+ const manageItem = getActionItems ( items ) . find ( a => a . item ?. id === 'manageModels' ) ;
639+ assert . strictEqual ( manageItem , undefined ) ;
640+ // No trailing separator should exist for manage models
641+ assert . strictEqual ( getSeparatorCount ( items ) , 0 ) ;
642+ } ) ;
643+
594644 test ( 'anonymous user model selection triggers onSelect normally' , ( ) => {
595645 const auto = createAutoModel ( ) ;
596646 const modelA = createModel ( 'gpt-4o' , 'GPT-4o' ) ;
@@ -608,6 +658,7 @@ suite('buildModelPickerItems', () => {
608658 undefined ,
609659 stubCommandService ,
610660 anonymousEntitlementService ,
661+ true ,
611662 ) ;
612663 const gptItem = getActionItems ( items ) . find ( a => a . label === 'GPT-4o' ) ;
613664 assert . ok ( gptItem ?. item ) ;
0 commit comments