Problem
A user-scoped Copilot CLI extension can register and manually render a canvas, but calling the documented low-level session.rpc.canvas.open route on resume does not reliably make the canvas visible and emits a malformed event warning in the extension process.
Copilot CLI version: 1.0.71-0 on macOS arm64.
Reproduction
- Register a canvas through
joinSession({ canvases: [...], requestCanvasRenderer: true }).
- After detecting a resumed session, resolve the canvas through
session.rpc.canvas.list().
- Call
session.rpc.canvas.open with the exact returned provider ID:
await session.rpc.canvas.open({
extensionId: declared.extensionId,
canvasId: declared.canvasId,
instanceId: "stable-instance",
input: { key: "example" },
});
A complete implementation and focused tests are available in the Session Briefing adapter and its test.
Actual behavior
- The
canvas.open promise resolves; the extension's bounded failure diagnostic does not run.
- The extension process logs
failed to deserialize session.canvas.opened payload.
- The resumed CLI does not reliably show/focus the canvas.
- The SDK rejects the event because the payload does not satisfy
OpenCanvasInstance (provider identity, instance/canvas IDs, reopen, and availability).
Expected behavior
The returned/opened snapshot and session.canvas.opened event satisfy the bundled SDK schema, and reopening a stable instance visibly focuses the canvas.
Additional evidence
- The same canvas renders successfully when opened through the host's
open_canvas tool with the explicit provider ID.
- Omitting
extensionId and passing the exact ID returned by canvas.list() both produce the malformed-event warning.
- The canvas ID is unique in the session.
A small diagnostic option to log or expose the rejected event shape would also make this class of failure much easier to debug without instrumenting the SDK.
Problem
A user-scoped Copilot CLI extension can register and manually render a canvas, but calling the documented low-level
session.rpc.canvas.openroute on resume does not reliably make the canvas visible and emits a malformed event warning in the extension process.Copilot CLI version:
1.0.71-0on macOS arm64.Reproduction
joinSession({ canvases: [...], requestCanvasRenderer: true }).session.rpc.canvas.list().session.rpc.canvas.openwith the exact returned provider ID:A complete implementation and focused tests are available in the Session Briefing adapter and its test.
Actual behavior
canvas.openpromise resolves; the extension's bounded failure diagnostic does not run.failed to deserialize session.canvas.opened payload.OpenCanvasInstance(provider identity, instance/canvas IDs,reopen, andavailability).Expected behavior
The returned/opened snapshot and
session.canvas.openedevent satisfy the bundled SDK schema, and reopening a stable instance visibly focuses the canvas.Additional evidence
open_canvastool with the explicit provider ID.extensionIdand passing the exact ID returned bycanvas.list()both produce the malformed-event warning.A small diagnostic option to log or expose the rejected event shape would also make this class of failure much easier to debug without instrumenting the SDK.