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

  1. Align the CLI and SDK versions so request payloads include both sessionId and question
  2. Inspect the incoming RPC params (debug logging) to find which field is missing or empty
  3. Check custom middleware/interceptors aren't stripping fields from params
  4. 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

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


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)