microsoft / microsoft/vscode

Normalize required semantics for ask-user questions across providers

Open
#331,129 0 comments 0 reactions 1 assignee Claimed by @roblourens View on GitHub
Dominant language
TypeScript
Stars
193k
Forks
42.4k
PR merge metrics
PR metrics pending

Description

## Problem

Ordinary ask-user questions currently have inconsistent `required` semantics across agent providers. This surfaced as a confusing required `*` in the Agents Window.

`ChatInputQuestionBase` supports optional `required?: boolean`, but the source protocols do not consistently provide that information:

- Copilot SDK `UserInputRequest` has no `required` field, yet `src/vs/platform/agentHost/node/copilot/copilotAgentSession.ts` maps ordinary `ask_user` questions with `required: true` (around lines 3255-3271).
- Codex similarly sets `required: true` in `src/vs/platform/agentHost/node/codex/codexUserInputMapper.ts` (around lines 18-41).
- Claude's ordinary `AskUserQuestion` mapper omits `required` in `src/vs/platform/agentHost/node/claude/claudeInteractiveTools.ts` (around lines 98-123).

In the workbench, `required` prevents advancing/submitting while a question is unanswered and adds a visible `*`. `allowSkip` still allows dismissing the entire prompt, which makes the provider-dependent asterisk especially unclear.

MCP elicitation is distinct: it correctly derives required fields from the MCP JSON Schema `required` set and should retain those schema-driven semantics.

## Expected

Ordinary ask-user questions should have normalized semantics across providers—likely optional unless the source protocol explicitly marks them required. MCP form questions should continue to derive `required` from their JSON Schema.

## Actual

Equivalent ordinary questions appear required for Copilot and Codex, but optional for Claude, based on provider-specific mapper defaults rather than source-protocol semantics.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.