@@ -19,60 +19,147 @@ pub mod tool_manager;
1919pub mod tools;
2020pub mod util;
2121use std:: borrow:: Cow ;
22- use std:: collections:: { HashMap , VecDeque } ;
23- use std:: io:: { IsTerminal , Read , Write } ;
22+ use std:: collections:: {
23+ HashMap ,
24+ VecDeque ,
25+ } ;
26+ use std:: io:: {
27+ IsTerminal ,
28+ Read ,
29+ Write ,
30+ } ;
2431use std:: process:: ExitCode ;
2532use std:: sync:: Arc ;
26- use std:: time:: { Duration , Instant } ;
33+ use std:: time:: {
34+ Duration ,
35+ Instant ,
36+ } ;
2737
2838use amzn_codewhisperer_client:: types:: SubscriptionStatus ;
29- use clap:: { Args , CommandFactory , Parser } ;
39+ use clap:: {
40+ Args ,
41+ CommandFactory ,
42+ Parser ,
43+ } ;
3044use cli:: compact:: CompactStrategy ;
31- use cli:: model:: { get_available_models, select_model} ;
45+ use cli:: model:: {
46+ get_available_models,
47+ select_model,
48+ } ;
3249pub use conversation:: ConversationState ;
3350use conversation:: TokenWarningLevel ;
34- use crossterm:: style:: { Attribute , Color , Stylize } ;
35- use crossterm:: { cursor, execute, queue, style, terminal} ;
36- use eyre:: { Report , Result , bail, eyre} ;
51+ use crossterm:: style:: {
52+ Attribute ,
53+ Color ,
54+ Stylize ,
55+ } ;
56+ use crossterm:: {
57+ cursor,
58+ execute,
59+ queue,
60+ style,
61+ terminal,
62+ } ;
63+ use eyre:: {
64+ Report ,
65+ Result ,
66+ bail,
67+ eyre,
68+ } ;
3769use input_source:: InputSource ;
38- use message:: { AssistantMessage , AssistantToolUse , ToolUseResult , ToolUseResultBlock } ;
39- use parse:: { ParseState , interpret_markdown} ;
40- use parser:: { RecvErrorKind , RequestMetadata , SendMessageStream } ;
70+ use message:: {
71+ AssistantMessage ,
72+ AssistantToolUse ,
73+ ToolUseResult ,
74+ ToolUseResultBlock ,
75+ } ;
76+ use parse:: {
77+ ParseState ,
78+ interpret_markdown,
79+ } ;
80+ use parser:: {
81+ RecvErrorKind ,
82+ RequestMetadata ,
83+ SendMessageStream ,
84+ } ;
4185use regex:: Regex ;
42- use spinners:: { Spinner , Spinners } ;
86+ use spinners:: {
87+ Spinner ,
88+ Spinners ,
89+ } ;
4390use thiserror:: Error ;
4491use time:: OffsetDateTime ;
4592use token_counter:: TokenCounter ;
4693use tokio:: signal:: ctrl_c;
47- use tokio:: sync:: { Mutex , broadcast} ;
48- use tool_manager:: { PromptQuery , PromptQueryResult , ToolManager , ToolManagerBuilder } ;
94+ use tokio:: sync:: {
95+ Mutex ,
96+ broadcast,
97+ } ;
98+ use tool_manager:: {
99+ PromptQuery ,
100+ PromptQueryResult ,
101+ ToolManager ,
102+ ToolManagerBuilder ,
103+ } ;
49104use tools:: gh_issue:: GhIssueContext ;
50- use tools:: { NATIVE_TOOLS , OutputKind , QueuedTool , Tool , ToolSpec } ;
51- use tracing:: { debug, error, info, trace, warn} ;
105+ use tools:: {
106+ NATIVE_TOOLS ,
107+ OutputKind ,
108+ QueuedTool ,
109+ Tool ,
110+ ToolSpec ,
111+ } ;
112+ use tracing:: {
113+ debug,
114+ error,
115+ info,
116+ trace,
117+ warn,
118+ } ;
52119use util:: images:: RichImageBlock ;
53120use util:: ui:: draw_box;
54- use util:: { animate_output, play_notification_bell} ;
121+ use util:: {
122+ animate_output,
123+ play_notification_bell,
124+ } ;
55125use winnow:: Partial ;
56126use winnow:: stream:: Offset ;
57127
58- use super :: agent:: { DEFAULT_AGENT_NAME , PermissionEvalResult } ;
128+ use super :: agent:: {
129+ DEFAULT_AGENT_NAME ,
130+ PermissionEvalResult ,
131+ } ;
59132use crate :: api_client:: model:: ToolResultStatus ;
60- use crate :: api_client:: { self , ApiClientError } ;
133+ use crate :: api_client:: {
134+ self ,
135+ ApiClientError ,
136+ } ;
61137use crate :: auth:: AuthError ;
62138use crate :: auth:: builder_id:: is_idc_user;
63139use crate :: cli:: agent:: Agents ;
64140use crate :: cli:: chat:: cli:: SlashCommand ;
65141use crate :: cli:: chat:: cli:: model:: find_model;
66- use crate :: cli:: chat:: cli:: prompts:: { GetPromptError , PromptsSubcommand } ;
142+ use crate :: cli:: chat:: cli:: prompts:: {
143+ GetPromptError ,
144+ PromptsSubcommand ,
145+ } ;
67146use crate :: cli:: chat:: util:: sanitize_unicode_tags;
68147use crate :: database:: settings:: Setting ;
69148use crate :: mcp_client:: Prompt ;
70149use crate :: os:: Os ;
71150use crate :: telemetry:: core:: {
72- AgentConfigInitArgs , ChatAddedMessageParams , ChatConversationType , MessageMetaTag , RecordUserTurnCompletionArgs ,
151+ AgentConfigInitArgs ,
152+ ChatAddedMessageParams ,
153+ ChatConversationType ,
154+ MessageMetaTag ,
155+ RecordUserTurnCompletionArgs ,
73156 ToolUseEventBuilder ,
74157} ;
75- use crate :: telemetry:: { ReasonCode , TelemetryResult , get_error_reason} ;
158+ use crate :: telemetry:: {
159+ ReasonCode ,
160+ TelemetryResult ,
161+ get_error_reason,
162+ } ;
76163use crate :: util:: MCP_SERVER_TOOL_DELIMITER ;
77164
78165const LIMIT_REACHED_TEXT : & str = color_print:: cstr! { "You've used all your free requests for this month. You have two options:
@@ -185,17 +272,13 @@ impl ChatArgs {
185272 agents. trust_all_tools = self . trust_all_tools ;
186273
187274 os. telemetry
188- . send_agent_config_init (
189- & os. database ,
190- conversation_id. clone ( ) ,
191- AgentConfigInitArgs {
192- agents_loaded_count : md. load_count as i64 ,
193- agents_loaded_failed_count : md. load_failed_count as i64 ,
194- legacy_profile_migration_executed : md. migration_performed ,
195- legacy_profile_migrated_count : md. migrated_count as i64 ,
196- launched_agent : md. launched_agent ,
197- } ,
198- )
275+ . send_agent_config_init ( & os. database , conversation_id. clone ( ) , AgentConfigInitArgs {
276+ agents_loaded_count : md. load_count as i64 ,
277+ agents_loaded_failed_count : md. load_failed_count as i64 ,
278+ legacy_profile_migration_executed : md. migration_performed ,
279+ legacy_profile_migrated_count : md. migrated_count as i64 ,
280+ launched_agent : md. launched_agent ,
281+ } )
199282 . await
200283 . map_err ( |err| error ! ( ?err, "failed to send agent config init telemetry" ) )
201284 . ok ( ) ;
@@ -2710,31 +2793,26 @@ impl ChatSession {
27102793 } ;
27112794
27122795 os. telemetry
2713- . send_record_user_turn_completion (
2714- & os. database ,
2715- conversation_id,
2716- result,
2717- RecordUserTurnCompletionArgs {
2718- message_ids : mds. iter ( ) . map ( |md| md. message_id . clone ( ) ) . collect :: < _ > ( ) ,
2719- request_ids : mds. iter ( ) . map ( |md| md. request_id . clone ( ) ) . collect :: < _ > ( ) ,
2720- reason,
2721- reason_desc,
2722- status_code,
2723- time_to_first_chunks_ms : mds
2724- . iter ( )
2725- . map ( |md| md. time_to_first_chunk . map ( |d| d. as_secs_f64 ( ) * 1000.0 ) )
2726- . collect :: < _ > ( ) ,
2727- chat_conversation_type : md. and_then ( |md| md. chat_conversation_type ) ,
2728- assistant_response_length : mds. iter ( ) . map ( |md| md. response_size as i64 ) . sum ( ) ,
2729- message_meta_tags : mds. last ( ) . map ( |md| md. message_meta_tags . clone ( ) ) . unwrap_or_default ( ) ,
2730- user_prompt_length : mds. first ( ) . map ( |md| md. user_prompt_length ) . unwrap_or_default ( ) as i64 ,
2731- user_turn_duration_seconds,
2732- follow_up_count : mds
2733- . iter ( )
2734- . filter ( |md| matches ! ( md. chat_conversation_type, Some ( ChatConversationType :: ToolUse ) ) )
2735- . count ( ) as i64 ,
2736- } ,
2737- )
2796+ . send_record_user_turn_completion ( & os. database , conversation_id, result, RecordUserTurnCompletionArgs {
2797+ message_ids : mds. iter ( ) . map ( |md| md. message_id . clone ( ) ) . collect :: < _ > ( ) ,
2798+ request_ids : mds. iter ( ) . map ( |md| md. request_id . clone ( ) ) . collect :: < _ > ( ) ,
2799+ reason,
2800+ reason_desc,
2801+ status_code,
2802+ time_to_first_chunks_ms : mds
2803+ . iter ( )
2804+ . map ( |md| md. time_to_first_chunk . map ( |d| d. as_secs_f64 ( ) * 1000.0 ) )
2805+ . collect :: < _ > ( ) ,
2806+ chat_conversation_type : md. and_then ( |md| md. chat_conversation_type ) ,
2807+ assistant_response_length : mds. iter ( ) . map ( |md| md. response_size as i64 ) . sum ( ) ,
2808+ message_meta_tags : mds. last ( ) . map ( |md| md. message_meta_tags . clone ( ) ) . unwrap_or_default ( ) ,
2809+ user_prompt_length : mds. first ( ) . map ( |md| md. user_prompt_length ) . unwrap_or_default ( ) as i64 ,
2810+ user_turn_duration_seconds,
2811+ follow_up_count : mds
2812+ . iter ( )
2813+ . filter ( |md| matches ! ( md. chat_conversation_type, Some ( ChatConversationType :: ToolUse ) ) )
2814+ . count ( ) as i64 ,
2815+ } )
27382816 . await
27392817 . ok ( ) ;
27402818 }
0 commit comments