@@ -2,16 +2,9 @@ use std::fmt::Display;
22use std:: io:: SeekFrom ;
33
44use fd_lock:: RwLock ;
5- use serde_json:: {
6- Map ,
7- Value ,
8- } ;
5+ use serde_json:: { Map , Value } ;
96use tokio:: fs:: File ;
10- use tokio:: io:: {
11- AsyncReadExt ,
12- AsyncSeekExt ,
13- AsyncWriteExt ,
14- } ;
7+ use tokio:: io:: { AsyncReadExt , AsyncSeekExt , AsyncWriteExt } ;
158
169use super :: DatabaseError ;
1710
@@ -33,6 +26,7 @@ pub enum Setting {
3326 McpNoInteractiveTimeout ,
3427 McpLoadedBefore ,
3528 ChatDefaultModel ,
29+ TrustedTools ,
3630}
3731
3832impl AsRef < str > for Setting {
@@ -54,6 +48,7 @@ impl AsRef<str> for Setting {
5448 Self :: McpNoInteractiveTimeout => "mcp.noInteractiveTimeout" ,
5549 Self :: McpLoadedBefore => "mcp.loadedBefore" ,
5650 Self :: ChatDefaultModel => "chat.defaultModel" ,
51+ Self :: TrustedTools => "tools.trusted" ,
5752 }
5853 }
5954}
@@ -85,6 +80,7 @@ impl TryFrom<&str> for Setting {
8580 "mcp.noInteractiveTimeout" => Ok ( Self :: McpNoInteractiveTimeout ) ,
8681 "mcp.loadedBefore" => Ok ( Self :: McpLoadedBefore ) ,
8782 "chat.defaultModel" => Ok ( Self :: ChatDefaultModel ) ,
83+ "tools.trusted" => Ok ( Self :: TrustedTools ) ,
8884 _ => Err ( DatabaseError :: InvalidSetting ( value. to_string ( ) ) ) ,
8985 }
9086 }
@@ -150,6 +146,19 @@ impl Settings {
150146 self . get ( key) . and_then ( |value| value. as_str ( ) . map ( |s| s. into ( ) ) )
151147 }
152148
149+ pub fn get_array < T > ( & self , key : Setting ) -> Option < Vec < T > >
150+ where
151+ T : serde:: de:: DeserializeOwned ,
152+ {
153+ self . get ( key) . and_then ( |value| {
154+ value. as_array ( ) . and_then ( |arr| {
155+ arr. iter ( )
156+ . map ( |v| serde_json:: from_value ( v. clone ( ) ) . ok ( ) )
157+ . collect :: < Option < Vec < T > > > ( )
158+ } )
159+ } )
160+ }
161+
153162 pub fn get_int ( & self , key : Setting ) -> Option < i64 > {
154163 self . get ( key) . and_then ( |value| value. as_i64 ( ) )
155164 }
@@ -204,12 +213,17 @@ mod test {
204213 assert_eq ! ( settings. get( Setting :: ShareCodeWhispererContent ) , None ) ;
205214 assert_eq ! ( settings. get( Setting :: McpLoadedBefore ) , None ) ;
206215 assert_eq ! ( settings. get( Setting :: ChatDefaultModel ) , None ) ;
216+ assert_eq ! ( settings. get( Setting :: TrustedTools ) , None ) ;
207217
208218 settings. set ( Setting :: TelemetryEnabled , true ) . await . unwrap ( ) ;
209219 settings. set ( Setting :: OldClientId , "test" ) . await . unwrap ( ) ;
210220 settings. set ( Setting :: ShareCodeWhispererContent , false ) . await . unwrap ( ) ;
211221 settings. set ( Setting :: McpLoadedBefore , true ) . await . unwrap ( ) ;
212222 settings. set ( Setting :: ChatDefaultModel , "model 1" ) . await . unwrap ( ) ;
223+ settings
224+ . set ( Setting :: TrustedTools , r#"["tool_a","tool_b"]"# )
225+ . await
226+ . unwrap ( ) ;
213227
214228 assert_eq ! ( settings. get( Setting :: TelemetryEnabled ) , Some ( & Value :: Bool ( true ) ) ) ;
215229 assert_eq ! (
@@ -225,15 +239,21 @@ mod test {
225239 settings. get( Setting :: ChatDefaultModel ) ,
226240 Some ( & Value :: String ( "model 1" . to_string( ) ) )
227241 ) ;
242+ assert_eq ! (
243+ settings. get( Setting :: TrustedTools ) ,
244+ Some ( & Value :: String ( r#"["tool_a","tool_b"]"# . to_string( ) ) )
245+ ) ;
228246
229247 settings. remove ( Setting :: TelemetryEnabled ) . await . unwrap ( ) ;
230248 settings. remove ( Setting :: OldClientId ) . await . unwrap ( ) ;
231249 settings. remove ( Setting :: ShareCodeWhispererContent ) . await . unwrap ( ) ;
232250 settings. remove ( Setting :: McpLoadedBefore ) . await . unwrap ( ) ;
251+ settings. remove ( Setting :: TrustedTools ) . await . unwrap ( ) ;
233252
234253 assert_eq ! ( settings. get( Setting :: TelemetryEnabled ) , None ) ;
235254 assert_eq ! ( settings. get( Setting :: OldClientId ) , None ) ;
236255 assert_eq ! ( settings. get( Setting :: ShareCodeWhispererContent ) , None ) ;
237256 assert_eq ! ( settings. get( Setting :: McpLoadedBefore ) , None ) ;
257+ assert_eq ! ( settings. get( Setting :: TrustedTools ) , None ) ;
238258 }
239259}
0 commit comments