Skip to content

Conversation

@ScDor
Copy link

@ScDor ScDor commented Jan 31, 2026

This PR enhances the ask_followup_question tool to support multiple questions and optional multiple-choice responses.

Key changes:

  • Updated ask_followup_question schema to accept a questions array.
  • Support for Question objects with text and options.
  • New UI for handling multiple questions (all at once or one by one).
  • Added user settings to toggle one-by-one question display.
  • Improved streaming logic to show the first question while accumulating others.
  • Fully migrated to native tool calling protocol.
  • Added comprehensive unit and UI tests.

Important

Enhance ask_followup_question to support multiple questions and multiple-choice responses, with updated schema, UI, and tests.

  • Behavior:
    • ask_followup_question now supports multiple questions and multiple-choice options.
    • Updated ask_followup_question schema in ask_followup_question.ts to accept questions array.
    • New UI component MultiQuestionHandler in ChatRow.tsx to handle multiple questions.
    • Added user setting showQuestionsOneByOne in UISettings.tsx to toggle question display mode.
    • Improved streaming logic in AskFollowupQuestionTool.ts to show first question while accumulating others.
  • Tests:
    • Added tests for MultiQuestionHandler in MultiQuestionHandler.spec.tsx.
    • Updated tests in askFollowupQuestionTool.spec.ts to cover new functionality.
  • Misc:
    • Added showQuestionsOneByOne setting to ExtensionStateContext.tsx and SettingsView.tsx.
    • Updated translations in chat.json for new question handling.

This description was created by Ellipsis for d3028c3. You can customize this summary. It will automatically update as commits are pushed.

ScDor added 4 commits January 16, 2026 18:30
- Separate navigation logic from submission logic in MultiQuestionHandler
- Add dedicated handleFinish function to send combined responses
- Prevent immediate sending when navigating between questions
- Add comprehensive tests to verify the UX fix
- All existing functionality preserved, tests passing
@ScDor ScDor requested review from cte, jr and mrubens as code owners January 31, 2026 11:48
@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. Enhancement New feature or request labels Jan 31, 2026
@roomote
Copy link
Contributor

roomote bot commented Jan 31, 2026

Rooviewer Clock   See task

Reviewed 5c5811c (Indonesian translation fix). The Vietnamese word in the Indonesian locale is now corrected. One previously flagged issue remains unresolved.

  • Missing translation keys for showQuestionsOneByOne UI setting in settings.json
  • Type mismatch between FollowUpData interface (string[]) and actual runtime data (Array<string | { text: string; options?: string[] }>)
  • showQuestionsOneByOne not wired into ClineProvider.getState() / getStateToPostToWebview()
  • Missing taskHeaderHighlight translation keys in all locale files (UI shows raw key strings)
  • taskHeaderHighlightEnabled removed from save payload but toggle still rendered in UISettings
  • Vietnamese word "t\u1eeb" used in Indonesian locale id/settings.json instead of Indonesian "dari"
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

Comment on lines +107 to +122
<SearchableSetting
settingId="ui-show-questions-one-by-one"
section="ui"
label={t("settings:ui.showQuestionsOneByOne.label")}>
<div className="flex flex-col gap-1">
<VSCodeCheckbox
checked={showQuestionsOneByOne}
onChange={(e: any) => handleShowQuestionsOneByOneChange(e.target.checked)}
data-testid="show-questions-one-by-one-checkbox">
<span className="font-medium">{t("settings:ui.showQuestionsOneByOne.label")}</span>
</VSCodeCheckbox>
<div className="text-vscode-descriptionForeground text-sm ml-5 mt-1">
{t("settings:ui.showQuestionsOneByOne.description")}
</div>
</div>
</SearchableSetting>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing translation keys. The settings:ui.showQuestionsOneByOne.label and settings:ui.showQuestionsOneByOne.description keys are referenced here but not defined in webview-ui/src/i18n/locales/en/settings.json. The UI section in that file only has collapseThinking and requireCtrlEnterToSend. This will cause the raw translation keys to be displayed in the UI instead of human-readable text.

Fix it with Roo Code or mention @roomote and request a fix.

| "enterBehavior"
| "includeCurrentTime"
| "includeCurrentCost"
| "showQuestionsOneByOne"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

showQuestionsOneByOne is added to ExtensionState here, but ClineProvider.ts never includes it in the state objects returned by getState() or getStateToPostToWebview(). Every other UI setting in this Pick type (e.g., enterBehavior, includeCurrentCost, taskHeaderHighlightEnabled) is explicitly included in both methods. Without the same wiring, the setting value stored via contextProxy.setValue is never sent back to the webview -- it will always default to false on initial load and after webview reloads, and the ExtensionStateContext check at line 343 ((newState as any).showQuestionsOneByOne) will never trigger. You need to add showQuestionsOneByOne to the destructured values from getState() (~line 2082), and include showQuestionsOneByOne: showQuestionsOneByOne ?? false in both state return objects (near lines 2228 and 2470).

Fix it with Roo Code or mention @roomote and request a fix.

Comment on lines +131 to +146
<SearchableSetting
settingId="ui-task-header-highlight"
section="ui"
label={t("settings:ui.taskHeaderHighlight.label")}>
<div className="flex flex-col gap-1">
<VSCodeCheckbox
checked={taskHeaderHighlightEnabled}
onChange={(e: any) => handleTaskHeaderHighlightChange(e.target.checked)}
data-testid="task-header-highlight-checkbox">
<span className="font-medium">{t("settings:ui.taskHeaderHighlight.label")}</span>
</VSCodeCheckbox>
<div className="text-vscode-descriptionForeground text-sm ml-5 mt-1">
{t("settings:ui.taskHeaderHighlight.description")}
</div>
</div>
</SearchableSetting>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The translation keys settings:ui.taskHeaderHighlight.label and settings:ui.taskHeaderHighlight.description referenced here don't exist in any locale's settings.json. The old taskCompleteColor keys were removed during the merge with main (which reverted the highlight feature in #11349), but the replacement taskHeaderHighlight keys were never added. Users will see raw key strings like settings:ui.taskHeaderHighlight.label in the settings UI. Either add the translation keys to all locale files, or remove this setting block entirely since the highlight feature it controls was reverted on main and TaskHeader.tsx no longer reads taskHeaderHighlightEnabled.

Fix it with Roo Code or mention @roomote and request a fix.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roomote fix it

Copy link
Contributor

@roomote roomote bot Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixaroo Clock   See task

Removed the orphaned taskHeaderHighlight setting block, handler, and prop from UISettings since the feature was reverted on main and the translation keys were never added. All lint, type checks, and tests pass.

View commit | Revert commit

enterBehavior: enterBehavior ?? "send",
includeCurrentTime: includeCurrentTime ?? true,
includeCurrentCost: includeCurrentCost ?? true,
showQuestionsOneByOne: showQuestionsOneByOne ?? false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

taskHeaderHighlightEnabled was removed from this save payload during the merge resolution (the diff shows -taskHeaderHighlightEnabled,), but the setting toggle was kept in UISettings. This means the checkbox renders in the UI but toggling it and clicking Save has no effect -- the value is never sent to the extension host. If the setting should be preserved, add taskHeaderHighlightEnabled: taskHeaderHighlightEnabled ?? false, here alongside the other UI settings. If the intent is to remove it (since the highlight was reverted on main), remove the toggle from UISettings.tsx as well.

Fix it with Roo Code or mention @roomote and request a fix.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roomote fix

Copy link
Contributor

@roomote roomote bot Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixaroo Clock   See task

Removed the orphaned taskHeaderHighlightEnabled setting that leaked back in during the merge resolution (the feature was reverted on main). Cleaned up all 7 affected files. All local checks passed (lint, type-check, tests).

View commit | Revert commit

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement New feature or request size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant