Skip to content

Canvas open_canvas arguments corrupted by CLI — JSON-RPC serialization bug #4721

Description

@arisng

Describe the bug

The CLI corrupts JSON-RPC arguments when dispatching tool calls to canvas extensions. The model's parsed arguments are concatenated with a trailing }{} suffix, causing malformed JSON. For open_canvas, the truncation happens mid-value producing "Unexpected end of JSON input" errors. The extension never receives any request.

This is reproducible in every session, not just with canvas extensions — list_canvas_capabilities, extensions_manage, and other tools also receive corrupted arguments.

Affected version

GitHub Copilot CLI 1.0.82

Steps to reproduce the behavior

  1. Install any canvas extension (e.g., session-md-reader) in ~/.copilot/extensions/
  2. Start a session and ask Copilot to open the canvas, or trigger any tool call that passes arguments with nested JSON (e.g., open_canvas)
  3. Observe the tool call fails with "Unexpected end of JSON input" and wasSyntaxError: true

Live reproduction in this session (CLI v1.0.82):

# open_canvas — arguments truncated mid-value:
The arguments for the tool call 'open_canvas' were not valid JSON.
Arguments: {"canvasId": "session-md-reader", "input": .
JSON parse error: Unexpected end of JSON input

# list_canvas_capabilities — trailing }{} appended:
The arguments for the tool call 'list_canvas_capabilities' were not valid JSON.
Arguments: {"canvasId": "session-md-reader"}{}.
JSON parse error: Unexpected non-whitespace character after JSON at position 33

# edit — trailing }{} appended:
The arguments for the tool call 'edit' were not valid JSON.
Arguments: {}{}.
JSON parse error: Unexpected non-whitespace character after JSON at position 2

# extensions_manage — trailing }{} appended:
The arguments for the tool call 'extensions_manage' were not valid JSON.
Arguments: {"operation": "inspect", "name": "session-md-reader"}{}.
JSON parse error: Unexpected non-whitespace character after JSON at position 53

Session events log evidence (session 96897afc-a61a-4dc0-8438-12630294f8bd):

Turn Tool Result
0 open_canvas success: false, "Unexpected end of JSON input", wasSyntaxError: true
1 open_canvas (retry) Same error
2 list_canvas_capabilities ✅ Success (no complex arguments needed)
3 open_canvas (with extra param) Same error

The toolRequests in the assistant message shows "arguments":{} even though the model correctly outputs <parameter=input>{"sessionUuid": ...} in markdown. The CLI's markdown-to-JSON parser fails to extract the parameter values.

Expected behavior

Tool call arguments should be correctly serialized to valid JSON and dispatched to the extension via JSON-RPC. The extension should receive the full arguments object (e.g., {"canvasId": "session-md-reader", "instanceId": "session-md-reader-96897afc", "input": {"sessionUuid": "..."}}).

Additional context

  • Extension logs: The extension shows only === ready === — it never receives any requests because the CLI fails before dispatching.
  • Extension health: The extension is correctly implemented (valid inputSchema, requestCanvasRenderer: true, proper open handler returning {url, title, status}). Verified by /extensions manage showing it as running.
  • Reproducibility: 100% reproducible. The bug affects all tools that pass arguments, not just canvas tools.
  • Model used: mimo-v2.5 (tool calls output in markdown <tool_call> format)
  • OS: Windows 11 (x86_64), PowerShell 7
  • Terminal: Windows Terminal

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions