github / github/copilot-cli

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

Ouverte
#4,721 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

area:mcp area:tools
Langage dominant
Shell
Étoiles
11.2k
Forks
1.9k
Merge moyen
14 h 16 min
PR mergées (30 j)
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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’échec avec des arguments d’outil JSON imbriqués et suivez l’analyseur markdown-vers-JSON de la CLI à travers la construction de toolRequests et la distribution JSON-RPC. Comparez les arguments analysés avec la sortie markdown du modèle et vérifiez que open_canvas, edit et extensions_manage parviennent à l’extension avec un seul objet JSON complet et valide.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
json, markdown, shell
Domaine
api, cli
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.