Skip to content

Commit 73868f3

Browse files
committed
feat follow up suggest
1 parent 3575274 commit 73868f3

File tree

16 files changed

+698
-43
lines changed

16 files changed

+698
-43
lines changed

package-lock.json

Lines changed: 27 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@
342342
"diff": "^5.2.0",
343343
"diff-match-patch": "^1.0.5",
344344
"fast-deep-equal": "^3.1.3",
345+
"fast-xml-parser": "^4.5.1",
345346
"fastest-levenshtein": "^1.0.16",
346347
"get-folder-size": "^5.0.0",
347348
"globby": "^14.0.2",

src/core/Cline.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import { DiffStrategy, getDiffStrategy } from "./diff/DiffStrategy"
7878
import { insertGroups } from "./diff/insert-groups"
7979
import { telemetryService } from "../services/telemetry/TelemetryService"
8080
import { validateToolUse, isToolAllowedForMode, ToolName } from "./mode-validator"
81+
import { parseXml } from "../utils/xml"
8182
import { getWorkspacePath } from "../utils/path"
8283

8384
type 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

src/core/assistant-message/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export const toolParamNames = [
5757
"mode",
5858
"message",
5959
"cwd",
60+
"follow_up",
6061
] as const
6162

6263
export type ToolParamName = (typeof toolParamNames)[number]
@@ -122,7 +123,7 @@ export interface AccessMcpResourceToolUse extends ToolUse {
122123

123124
export interface AskFollowupQuestionToolUse extends ToolUse {
124125
name: "ask_followup_question"
125-
params: Partial<Pick<Record<ToolParamName, string>, "question">>
126+
params: Partial<Pick<Record<ToolParamName, string>, "question" | "follow_up">>
126127
}
127128

128129
export interface AttemptCompletionToolUse extends ToolUse {

0 commit comments

Comments
 (0)