github / github/copilot-cli

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

Open
#4,721 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:mcp area:tools
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the failure with nested JSON tool arguments and trace the CLI's markdown-to-JSON parser through toolRequests construction and JSON-RPC dispatch. Compare the parsed arguments with the model's markdown output and verify that open_canvas, edit, and extensions_manage reach the extension with one complete valid JSON object.

Written by the indexing model from the issue text.

Assessment

Tech stack
json, markdown, shell
Domain
api, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.