Normalize required semantics for ask-user questions across providers
- 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
Assessment
This issue has not been assessed yet.