@@ -78,6 +78,7 @@ import { DiffStrategy, getDiffStrategy } from "./diff/DiffStrategy"
7878import { insertGroups } from "./diff/insert-groups"
7979import { telemetryService } from "../services/telemetry/TelemetryService"
8080import { validateToolUse , isToolAllowedForMode , ToolName } from "./mode-validator"
81+ import { parseXml } from "../utils/xml"
8182import { getWorkspacePath } from "../utils/path"
8283
8384type ToolResponse = string | Array < Anthropic . TextBlockParam | Anthropic . ImageBlockParam >
@@ -2771,6 +2772,7 @@ export class Cline extends EventEmitter<ClineEvents> {
27712772 }
27722773 case "ask_followup_question" : {
27732774 const question : string | undefined = block . params . question
2775+ const follow_up : string | undefined = block . params . follow_up
27742776 try {
27752777 if ( block . partial ) {
27762778 await this . ask ( "followup" , removeClosingTag ( "question" , question ) , block . partial ) . catch (
@@ -2785,8 +2787,51 @@ export class Cline extends EventEmitter<ClineEvents> {
27852787 )
27862788 break
27872789 }
2790+
2791+ if ( ! follow_up ) {
2792+ this . consecutiveMistakeCount ++
2793+ pushToolResult (
2794+ await this . sayAndCreateMissingParamError ( "ask_followup_question" , "follow_up" ) ,
2795+ )
2796+ break
2797+ }
2798+
2799+ let normalizedSuggest = null
2800+
2801+ type Suggest = {
2802+ answer : string
2803+ }
2804+
2805+ let parsedSuggest : {
2806+ suggest : Suggest [ ] | Suggest
2807+ }
2808+
2809+ try {
2810+ parsedSuggest = parseXml ( follow_up , [ "suggest.answer" ] ) as {
2811+ suggest : Suggest [ ] | Suggest
2812+ }
2813+ console . log ( "follow_up" , follow_up )
2814+ console . log ( "parsedSuggest" , parsedSuggest )
2815+ } catch ( error ) {
2816+ this . consecutiveMistakeCount ++
2817+ await this . say ( "error" , `Failed to parse operations: ${ error . message } ` )
2818+ pushToolResult ( formatResponse . toolError ( "Invalid operations xml format" ) )
2819+ break
2820+ }
2821+
27882822 this . consecutiveMistakeCount = 0
2789- const { text, images } = await this . ask ( "followup" , question , false )
2823+
2824+ normalizedSuggest = Array . isArray ( parsedSuggest ?. suggest )
2825+ ? parsedSuggest . suggest
2826+ : [ parsedSuggest ?. suggest ] . filter ( ( sug ) : sug is Suggest => sug !== undefined )
2827+
2828+ console . log ( "normalizedSuggest" , normalizedSuggest )
2829+ const follow_up_json = {
2830+ question,
2831+ suggest : normalizedSuggest ,
2832+ }
2833+
2834+ const { text, images } = await this . ask ( "followup" , JSON . stringify ( follow_up_json ) , false )
27902835 await this . say ( "user_feedback" , text ?? "" , images )
27912836 pushToolResult ( formatResponse . toolResult ( `<answer>\n${ text } \n</answer>` , images ) )
27922837 break
0 commit comments