@@ -38,7 +38,13 @@ use thinking::Thinking;
3838use tracing:: error;
3939use use_aws:: UseAws ;
4040
41- use super :: consts:: MAX_TOOL_RESPONSE_SIZE ;
41+ use super :: consts:: {
42+ MAX_TOOL_RESPONSE_SIZE ,
43+ USER_AGENT_APP_NAME ,
44+ USER_AGENT_ENV_VAR ,
45+ USER_AGENT_VERSION_KEY ,
46+ USER_AGENT_VERSION_VALUE ,
47+ } ;
4248use super :: util:: images:: RichImageBlocks ;
4349use crate :: cli:: agent:: {
4450 Agent ,
@@ -118,7 +124,7 @@ impl Tool {
118124 match self {
119125 Tool :: FsRead ( fs_read) => fs_read. invoke ( os, stdout) . await ,
120126 Tool :: FsWrite ( fs_write) => fs_write. invoke ( os, stdout, line_tracker) . await ,
121- Tool :: ExecuteCommand ( execute_command) => execute_command. invoke ( stdout) . await ,
127+ Tool :: ExecuteCommand ( execute_command) => execute_command. invoke ( os , stdout) . await ,
122128 Tool :: UseAws ( use_aws) => use_aws. invoke ( os, stdout) . await ,
123129 Tool :: Custom ( custom_tool) => custom_tool. invoke ( os, stdout) . await ,
124130 Tool :: GhIssue ( gh_issue) => gh_issue. invoke ( os, stdout) . await ,
@@ -425,6 +431,36 @@ pub fn queue_function_result(result: &str, updates: &mut impl Write, is_error: b
425431 Ok ( ( ) )
426432}
427433
434+ /// Helper function to set up environment variables with user agent metadata for CloudTrail tracking
435+ pub fn env_vars_with_user_agent ( os : & Os ) -> std:: collections:: HashMap < String , String > {
436+ let mut env_vars: std:: collections:: HashMap < String , String > = std:: env:: vars ( ) . collect ( ) ;
437+
438+ // Set up additional metadata for the AWS CLI user agent
439+ let user_agent_metadata_value = format ! (
440+ "{} {}/{}" ,
441+ USER_AGENT_APP_NAME , USER_AGENT_VERSION_KEY , USER_AGENT_VERSION_VALUE
442+ ) ;
443+
444+ // Check if the user agent metadata env var already exists using Os
445+ let existing_value = os. env . get ( USER_AGENT_ENV_VAR ) . ok ( ) ;
446+
447+ // If the user agent metadata env var already exists, append to it, otherwise set it
448+ if let Some ( existing_value) = existing_value {
449+ if !existing_value. is_empty ( ) {
450+ env_vars. insert (
451+ USER_AGENT_ENV_VAR . to_string ( ) ,
452+ format ! ( "{} {}" , existing_value, user_agent_metadata_value) ,
453+ ) ;
454+ } else {
455+ env_vars. insert ( USER_AGENT_ENV_VAR . to_string ( ) , user_agent_metadata_value) ;
456+ }
457+ } else {
458+ env_vars. insert ( USER_AGENT_ENV_VAR . to_string ( ) , user_agent_metadata_value) ;
459+ }
460+
461+ env_vars
462+ }
463+
428464#[ cfg( test) ]
429465mod tests {
430466 use std:: path:: MAIN_SEPARATOR ;
0 commit comments