From 0ee46a3024fd996c43bb477c1c347d9f05a5684c Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Mon, 10 Aug 2026 04:25:20 -0700 Subject: [PATCH] fix: decode addressed Claude prompt text --- src/main/claude/claude-structured-prompt-items.test.ts | 9 +++++++-- src/main/claude/claude-structured-prompt-replies.ts | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/claude/claude-structured-prompt-items.test.ts b/src/main/claude/claude-structured-prompt-items.test.ts index 0462c7da90f..db7ba28a37c 100644 --- a/src/main/claude/claude-structured-prompt-items.test.ts +++ b/src/main/claude/claude-structured-prompt-items.test.ts @@ -3,6 +3,7 @@ import { agentJournalItemKey } from '../../shared/agent-session-journal-item-key import { claudeQuestionItems } from './claude-structured-prompt-items' import { applyClaudePromptAnswer, + encodeClaudeQuestionOptionId, type ClaudePendingPrompt } from './claude-structured-prompt-replies' @@ -50,7 +51,9 @@ describe('Claude structured question addressing', () => { } const answer = 'https://example.test:8443/path' - expect(applyClaudePromptAnswer({ prompt }, answer)).toMatchObject({ + expect( + applyClaudePromptAnswer({ prompt }, encodeClaudeQuestionOptionId('q1', answer)) + ).toMatchObject({ updatedInput: { answers: { [questionId]: answer } } }) }) @@ -71,7 +74,9 @@ describe('Claude structured question addressing', () => { } const answer = 'frontend, backend' - expect(applyClaudePromptAnswer({ prompt, questionId }, answer)).toMatchObject({ + expect( + applyClaudePromptAnswer({ prompt, questionId }, encodeClaudeQuestionOptionId('q1', answer)) + ).toMatchObject({ updatedInput: { answers: { [questionId]: answer } } }) }) diff --git a/src/main/claude/claude-structured-prompt-replies.ts b/src/main/claude/claude-structured-prompt-replies.ts index 31cbe5724bb..60404251ebd 100644 --- a/src/main/claude/claude-structured-prompt-replies.ts +++ b/src/main/claude/claude-structured-prompt-replies.ts @@ -57,10 +57,15 @@ function questionAnswer(prompt: ClaudePendingPrompt, questionId: string, optionI if (decoded.questionId === `q${questionIndex + 1}` && label) { return label } + if (decoded.questionId === `q${questionIndex + 1}`) { + return decoded.answer + } const legacyChoice = options.some( (candidate) => isRecord(candidate) && readString(candidate.label) === decoded.answer ) - return decoded.questionId === questionId && legacyChoice ? decoded.answer : optionId + return decoded.questionId === questionId && (legacyChoice || decoded.answer.trim().length > 0) + ? decoded.answer + : optionId } function questionId(question: Record, index: number): string {