diff --git a/src/core/ClaudeDev.ts b/src/core/ClaudeDev.ts
index 7bfe38a..0dd5753 100644
--- a/src/core/ClaudeDev.ts
+++ b/src/core/ClaudeDev.ts
@@ -1770,35 +1770,37 @@ ${this.customInstructions.trim()}
break
}
this.consecutiveMistakeCount = 0
+
if (lastMessage && lastMessage.ask === "command") {
// complete command message
const didApprove = await askApproval("command", command)
if (!didApprove) {
break
}
- const [userRejected, result] = await this.executeCommandTool(command!)
- if (userRejected) {
- this.didRejectTool = true // test whats going on here
- }
- pushToolResult(result)
- break
- } else {
- // last message is completion_result, not command so it wasn't completed, need to complete it
- // empty string makes it invisible and just shows new task button
- const { response, text, images } = await this.ask("completion_result", "", false)
- if (response === "yesButtonTapped") {
- pushToolResult("") // signals to recursive loop to stop (for now this never happens since yesButtonTapped will trigger a new task)
+ const [userRejected, commandResult] = await this.executeCommandTool(command!, true)
+ if (commandResult) {
+ if (userRejected) {
+ this.didRejectTool = true // test whats going on here
+ }
+ pushToolResult(commandResult)
break
}
- await this.say("user_feedback", text ?? "", images)
- pushToolResult(
- this.formatToolResponseWithImages(
- `The user has provided feedback on the results. Consider their input to continue the task, and then attempt completion again.\n\n${text}\n`,
- images
- )
- )
+ }
+
+ // we already sent completion_result says, an empty string asks relinquishes control over button and field
+ const { response, text, images } = await this.ask("completion_result", "", false)
+ if (response === "yesButtonTapped") {
+ pushToolResult("") // signals to recursive loop to stop (for now this never happens since yesButtonTapped will trigger a new task)
break
}
+ await this.say("user_feedback", text ?? "", images)
+ pushToolResult(
+ this.formatToolResponseWithImages(
+ `The user has provided feedback on the results. Consider their input to continue the task, and then attempt completion again.\n\n${text}\n`,
+ images
+ )
+ )
+ break
}
} catch (error) {
await handleError("inspecting site", error)
@@ -2081,6 +2083,11 @@ ${this.customInstructions.trim()}
}
}
+ // in case no tool calls were made or tool call wasn't closed properly, set partial to false
+ if (this.assistantMessageContent.some((e) => e.partial)) {
+ this.assistantMessageContent.forEach((e) => (e.partial = false))
+ this.presentAssistantMessage() // if there is content to update then it will complete and update this.userMessageContentReady to true, which we pwaitfor before making the next request
+ }
this.didCompleteReadingStream = true
console.log("contentBlocks", apiContentBlocks)