github/copilot-sdk · error · ValueError
invalid user input request payload
Error message
invalid user input request payload
What it means
ValueError raised by CopilotClient._handle_user_input_request when a server-initiated user-input request lacks a non-empty sessionId or question. It is a generic guard against malformed payloads coming from the CLI server; the faulting input is the params dict from the wire, not user-supplied arguments.
Solutions
- Align the CLI and SDK versions so request payloads include both sessionId and question
- Inspect the incoming RPC params (debug logging) to find which field is missing or empty
- Check custom middleware/interceptors aren't stripping fields from params
- Reject or skip malformed requests defensively in a custom handler wrapper
Defensive patterns
Strategy: validation
Validate before calling
def is_valid_user_input_params(params: dict) -> bool:
return bool(params.get("sessionId")) and bool(params.get("question")) Type guard
def valid_user_input(params) -> bool:
return isinstance(params, dict) and isinstance(params.get("sessionId"), str) and params.get("sessionId") and isinstance(params.get("question"), str) and params.get("question") Try / catch
try:
result = await client._handle_user_input_request(params)
except ValueError as e:
if "invalid user input request payload" in str(e):
log.error("malformed userInput.request: %r", params)
else:
raise Prevention
- Keep CLI and SDK versions aligned
- Log full RPC params at debug level to catch payload drift
- Avoid middleware that strips or renames param fields
- Add contract tests for the user-input callback schema
When it happens
Trigger: The CLI server sends a userInput.request callback whose params are missing sessionId or question, or they are empty/None.
Common situations: Protocol/version mismatch where a newer CLI omits fields the SDK requires; corrupted or hand-crafted RPC payloads; middleware mutating params before dispatch; tool interception code forwarding incomplete params.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- invalid exit plan mode request payload
- invalid auto mode switch request payload
- invalid systemMessage.transform payload
- Invalid user input request payload
- Invalid exit plan mode request payload
AI-assisted analysis of github/copilot-sdk@cd8cf15dc3 (2026-09-09).
Data as JSON: /api/errors/bd011b274491e2aa.
Report an issue: GitHub.
Appendix: source
Thrown at python/copilot/client.py:4945
async def _handle_user_input_request(self, params: dict) -> dict:
"""
Handle a user input request from the CLI server.
Args:
params: The user input request parameters from the server.
Returns:
A dict containing the user's response.
Raises:
ValueError: If the request payload is invalid.
"""
session_id = params.get("sessionId")
question = params.get("question")
if not session_id or not question:
raise ValueError("invalid user input request payload")
with self._sessions_lock:
session = self._sessions.get(session_id)
if not session:
raise ValueError(f"unknown session {session_id}")
result = await session._handle_user_input_request(params)
return {"answer": result["answer"], "wasFreeform": result["wasFreeform"]}
async def _handle_exit_plan_mode_request(self, params: dict) -> dict:
"""Handle an exitPlanMode.request callback from the CLI server."""
session_id = params.get("sessionId")
summary = params.get("summary")
actions = params.get("actions")
recommended_action = params.get("recommendedAction")
if not session_id or not isinstance(summary, str):
raise ValueError("invalid exit plan mode request payload")View on GitHub (pinned to cd8cf15dc3)