@@ -64,76 +64,74 @@ export class ChatSelectedTools extends Disposable {
6464 /**
6565 * All tools and tool sets with their enabled state.
6666 */
67- get entriesMap ( ) : IObservable < IToolAndToolSetEnablementMap > {
68- return derived ( r => {
69- const map = new Map < IToolData | ToolSet , boolean > ( ) ;
67+ public readonly entriesMap : IObservable < IToolAndToolSetEnablementMap > = derived ( r => {
68+ const map = new Map < IToolData | ToolSet , boolean > ( ) ;
7069
71- const currentMode = this . _mode . read ( r ) ;
70+ const currentMode = this . _mode . read ( r ) ;
7271
73- let currentMap = this . _sessionStates . observable . read ( r ) . get ( currentMode . id ) ;
74- const modeTools = currentMode . customTools ?. read ( r ) ;
75- if ( ! currentMap && currentMode . kind === ChatModeKind . Agent && modeTools ) {
76- currentMap = this . _toolsService . toToolAndToolSetEnablementMap ( modeTools ) ;
77- }
78- if ( currentMap ) {
79- for ( const tool of this . _allTools . read ( r ) ) {
80- if ( tool . canBeReferencedInPrompt ) {
81- map . set ( tool , currentMap . get ( tool ) === true ) ; // false if not present
82- }
83- }
84- for ( const toolSet of this . _toolsService . toolSets . read ( r ) ) {
85- map . set ( toolSet , currentMap . get ( toolSet ) === true ) ; // false if not present
86- }
87- } else {
88- const currData = this . _selectedTools . read ( r ) ;
89- const disabledToolSets = new Set ( currData . disabledToolSets ?? [ ] ) ;
90- const disabledTools = new Set ( currData . disabledTools ?? [ ] ) ;
91-
92- for ( const tool of this . _allTools . read ( r ) ) {
93- if ( tool . canBeReferencedInPrompt ) {
94- map . set ( tool , ! disabledTools . has ( tool . id ) ) ;
95- }
72+ let currentMap = this . _sessionStates . observable . read ( r ) . get ( currentMode . id ) ;
73+ const modeTools = currentMode . customTools ?. read ( r ) ;
74+ if ( ! currentMap && currentMode . kind === ChatModeKind . Agent && modeTools ) {
75+ currentMap = this . _toolsService . toToolAndToolSetEnablementMap ( modeTools ) ;
76+ }
77+ if ( currentMap ) {
78+ for ( const tool of this . _allTools . read ( r ) ) {
79+ if ( tool . canBeReferencedInPrompt ) {
80+ map . set ( tool , currentMap . get ( tool ) === true ) ; // false if not present
9681 }
97- for ( const toolSet of this . _toolsService . toolSets . read ( r ) ) {
98- map . set ( toolSet , ! disabledToolSets . has ( toolSet . id ) ) ;
82+ }
83+ for ( const toolSet of this . _toolsService . toolSets . read ( r ) ) {
84+ map . set ( toolSet , currentMap . get ( toolSet ) === true ) ; // false if not present
85+ }
86+ } else {
87+ const currData = this . _selectedTools . read ( r ) ;
88+ const disabledToolSets = new Set ( currData . disabledToolSets ?? [ ] ) ;
89+ const disabledTools = new Set ( currData . disabledTools ?? [ ] ) ;
90+
91+ for ( const tool of this . _allTools . read ( r ) ) {
92+ if ( tool . canBeReferencedInPrompt ) {
93+ map . set ( tool , ! disabledTools . has ( tool . id ) ) ;
9994 }
10095 }
101- return map ;
102- } ) ;
103- }
96+ for ( const toolSet of this . _toolsService . toolSets . read ( r ) ) {
97+ map . set ( toolSet , ! disabledToolSets . has ( toolSet . id ) ) ;
98+ }
99+ }
100+ return map ;
101+ } ) ;
104102
105- get userSelectedTools ( ) : IObservable < UserSelectedTools > {
106- return derived ( r => {
107- const result : UserSelectedTools = { } ;
108103
109- const _set = ( tool : IToolData , enabled : boolean ) => {
110- // ONLY disable a tool that isn't enabled yet
111- const enabledNow = result [ tool . id ] ;
112- if ( enabled || ! enabledNow ) {
113- result [ tool . id ] = enabled ;
114- }
115- } ;
104+ public readonly userSelectedTools : IObservable < UserSelectedTools > = derived ( r => {
105+ const result : UserSelectedTools = { } ;
116106
117- const map = this . entriesMap . read ( r ) ;
118- for ( const [ item , enabled ] of map ) {
119- if ( item instanceof ToolSet ) {
120- for ( const tool of item . getTools ( r ) ) {
121- // Tools from an mcp tool set are explicitly enabled/disabled under the tool set.
122- // Other toolsets don't show individual tools under the tool set and enablement just follows the toolset.
123- const toolEnabled = item . source . type === 'mcp' ?
124- map . get ( tool ) ?? enabled :
125- enabled ;
126- _set ( tool , toolEnabled ) ;
127- }
128- } else {
129- if ( item . canBeReferencedInPrompt ) {
130- _set ( item , enabled ) ;
131- }
107+ const _set = ( tool : IToolData , enabled : boolean ) => {
108+ // ONLY disable a tool that isn't enabled yet
109+ const enabledNow = result [ tool . id ] ;
110+ if ( enabled || ! enabledNow ) {
111+ result [ tool . id ] = enabled ;
112+ }
113+ } ;
114+
115+ const map = this . entriesMap . read ( r ) ;
116+ for ( const [ item , enabled ] of map ) {
117+ if ( item instanceof ToolSet ) {
118+ for ( const tool of item . getTools ( r ) ) {
119+ // Tools from an mcp tool set are explicitly enabled/disabled under the tool set.
120+ // Other toolsets don't show individual tools under the tool set and enablement just follows the toolset.
121+ const toolEnabled = item . source . type === 'mcp' ?
122+ map . get ( tool ) ?? enabled :
123+ enabled ;
124+ _set ( tool , toolEnabled ) ;
125+ }
126+ } else {
127+ if ( item . canBeReferencedInPrompt ) {
128+ _set ( item , enabled ) ;
132129 }
133130 }
134- return result ;
135- } ) ;
136- }
131+ }
132+ return result ;
133+ } ) ;
134+
137135
138136 get entriesScope ( ) {
139137 const mode = this . _mode . get ( ) ;
0 commit comments