Browse Source

Show 'Start New Task' button if user tries to resume completed task

Saoud Rizwan 1 year ago
parent
commit
c277f7625f
3 changed files with 21 additions and 3 deletions
  1. 10 2
      src/ClaudeDev.ts
  2. 1 0
      src/shared/ExtensionMessage.ts
  3. 10 1
      webview-ui/src/components/ChatView.tsx

+ 10 - 2
src/ClaudeDev.ts

@@ -473,8 +473,16 @@ export class ClaudeDev {
 		const lastClaudeMessage = this.claudeMessages
 			.slice()
 			.reverse()
-			.find((m) => m.ask !== "resume_task") // could be multiple resume tasks
-		const { response, text, images } = await this.ask("resume_task") // calls poststatetowebview
+			.find((m) => !(m.ask === "resume_task" || m.ask === "resume_completed_task")) // could be multiple resume tasks
+
+		let askType: ClaudeAsk
+		if (lastClaudeMessage?.ask === "completion_result") {
+			askType = "resume_completed_task"
+		} else {
+			askType = "resume_task"
+		}
+
+		const { response, text, images } = await this.ask(askType) // calls poststatetowebview
 
 		let newUserContent: UserContent = []
 		if (response === "messageResponse") {

+ 1 - 0
src/shared/ExtensionMessage.ts

@@ -41,6 +41,7 @@ export type ClaudeAsk =
 	| "tool"
 	| "api_req_failed"
 	| "resume_task"
+	| "resume_completed_task"
 
 export type ClaudeSay =
 	| "task"

+ 10 - 1
webview-ui/src/components/ChatView.tsx

@@ -150,6 +150,13 @@ const ChatView = ({
 							setPrimaryButtonText("Resume Task")
 							setSecondaryButtonText(undefined)
 							break
+						case "resume_completed_task":
+							setTextAreaDisabled(false)
+							setClaudeAsk("resume_completed_task")
+							setEnableButtons(true)
+							setPrimaryButtonText("Start New Task")
+							setSecondaryButtonText(undefined)
+							break
 					}
 					break
 				case "say":
@@ -213,6 +220,7 @@ const ChatView = ({
 					case "command_output": // user can send input to command stdin
 					case "completion_result": // if this happens then the user has feedback for the completion result
 					case "resume_task":
+					case "resume_completed_task":
 						vscode.postMessage({
 							type: "askResponse",
 							askResponse: "messageResponse",
@@ -247,6 +255,7 @@ const ChatView = ({
 				vscode.postMessage({ type: "askResponse", askResponse: "yesButtonTapped" })
 				break
 			case "completion_result":
+			case "resume_completed_task":
 				// extension waiting for feedback. but we can just present a new task button
 				startNewTask()
 				break
@@ -406,8 +415,8 @@ const ChatView = ({
 					}
 					break
 				case "api_req_failed": // this message is used to update the latest api_req_started that the request failed
-					return false
 				case "resume_task":
+				case "resume_completed_task":
 					return false
 			}
 			switch (message.say) {