Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: github/copilot-sdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: rust/v1.0.0-beta.6
Choose a base ref
...
head repository: github/copilot-sdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: rust/v1.0.0-beta.7
Choose a head ref
  • 16 commits
  • 673 files changed
  • 6 contributors

Commits on May 22, 2026

  1. Configuration menu
    Copy the full SHA
    dbe9d27 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d8c0c7c View commit details
    Browse the repository at this point in the history
  3. Add runtime_instructions system message section to all SDKs (#1377)

    * Add runtime_instructions system message section to all SDKs
    
    Add support for the new runtime_instructions section added by the latest
    copilot-agent-runtime. This section targets runtime-provided context and
    instructions assembled from sources such as systemMessage.content, system
    notifications, memories, workspace context, mode-specific instructions,
    and content-exclusion policy.
    
    Changes across SDKs (excluding Java):
    - Node.js: Add to SystemMessageSection type union and SYSTEM_MESSAGE_SECTIONS
    - Python: Add to SystemMessageSection Literal type and SYSTEM_MESSAGE_SECTIONS
    - Go: Add SectionRuntimeInstructions constant with doc comments on all constants
    - .NET: Add SystemMessageSection.RuntimeInstructions using string-backed struct
      pattern (replaces former static class with string constants)
    - Rust: Comment-only update (uses raw strings, no predefined constants)
    
    Also renames SystemPromptSection/SYSTEM_PROMPT_SECTIONS to
    SystemMessageSection/SYSTEM_MESSAGE_SECTIONS across all SDKs for
    consistency, since these are sections of SystemMessageConfig.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix README: SystemMessageSection is a struct, not an enum
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix PublicDtoTests to handle non-string dictionary keys
    
    The test's TryCreateGenericCollection only handled dictionaries with
    string keys. With SystemMessageSection now being a struct used as a
    dictionary key, the test fell through to the IEnumerable path which
    created a List<KeyValuePair<...>> incompatible with IDictionary<...>.
    
    Generalized the dictionary handling to support any key type.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    stephentoub and Copilot authored May 22, 2026
    Configuration menu
    Copy the full SHA
    85d91ca View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    24d5ff6 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    578782e View commit details
    Browse the repository at this point in the history
  6. Fix flaky SDK E2E tests (#1379)

    * Fix flaky SDK E2E tests
    
    Avoid waiting for full assistant completions in tool-filter tests when the assertions only need captured CAPI requests. Replace fake echo MCP server configs with the shared Node MCP test server and wait for MCP connectivity before prompts in real MCP E2E tests.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Format Python E2E harness
    
    Apply Ruff formatting to the new exchange polling helper.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Address CodeQL review comments
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Avoid rooted path combine in test harness lookup
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Stabilize custom config dir E2E test
    
    Use SendAndWaitAsync so the test subscribes for response events before sending the prompt, and dispose the session after the custom config dir check.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Stabilize permission handler E2E test
    
    Start the send-and-wait operation before awaiting permission callbacks so response events are observed by the operation's subscription.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    stephentoub and Copilot authored May 22, 2026
    Configuration menu
    Copy the full SHA
    0c7886c View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    d99871c View commit details
    Browse the repository at this point in the history
  8. Implement phase 03 of merge to monorepo plan (#1369)

    * Add Java publish workflows, smoke test, and release scripts for monorepo
    
    Implement Phase 03 of the Java-to-monorepo migration plan, adapting
    the Java SDK's publishing and testing automation for the monorepo
    structure.
    
    Changes:
    - java-publish-maven.yml: add working-directory, use java/v tag prefix,
      scope secrets to Java
    - java-publish-snapshot.yml: add working-directory for monorepo
    - java-smoke-test.yml: new workflow running smoke tests on JDK 17 and
      JDK 25 with globally installed Copilot CLI (version pinned from
      pom.xml)
    - java.notes.template: release notes template for GitHub Releases
    - update-changelog.sh: script to update CHANGELOG.md during release,
      generating compare links with java/v tag prefix
    - test-update-changelog.sh: tests for the changelog update script
    - TestUtil.java: align findCliPath() Javadoc with actual resolution
      order (COPILOT_CLI_PATH first, then PATH search)
    - pom.xml: update copilot-sdk-ref-impl version property
    
    * Remove Java-specific CHANGELOG; use monorepo's release-changelog agent for java/v* and rust/v* scoped tags.
    
    Address [comments](#1369 (comment)) from @stephentoub .
    
    .github/scripts/release/update-changelog.sh (deleted): Custom awk-based script that maintained java/CHANGELOG.md is no longer needed.
    .github/scripts/release/test-update-changelog.sh (deleted): Tests for the above script.
    .github/workflows/java-publish-maven.yml: Remove update-changelog.sh call and CHANGELOG.md from git-add; add "Trigger changelog generation" step that invokes release-changelog.lock.yml with the java/v* tag.
    .github/workflows/release-changelog.md: Surgical additions to handle language-prefixed tags (java/v*, rust/v*) — scoped previous-tag lookup, scoped file filtering, scoped code snippets, and scoped heading format in CHANGELOG.md.
    .github/workflows/release-changelog.lock.yml: Recompiled from release-changelog.md via `gh aw compile`.
    java/CHANGELOG.md (deleted): No longer maintaining a Java-specific changelog; releases flow through the root CHANGELOG.md via the release-changelog agent.
    
    * Recompile workflows
    edburns authored May 22, 2026
    Configuration menu
    Copy the full SHA
    217db5f View commit details
    Browse the repository at this point in the history
  9. Fix .NET package version props generation (#1387)

    Generate the Copilot CLI version props before NuGet collects package files so the generated props file is included in the packed build assets.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    stephentoub and Copilot authored May 22, 2026
    Configuration menu
    Copy the full SHA
    4afa8ce View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    a68141d View commit details
    Browse the repository at this point in the history

Commits on May 23, 2026

  1. Add Java-specific content to monorepo copilot-instructions.md (#1391)

    Closes #1390
    
    Enrich `.github/copilot-instructions.md` with Java details that were
    present in the standalone copilot-sdk-java repo but missing from the
    monorepo variant:
    
    - **Developer workflows**: add single-test and format-check commands
    - **Testing & E2E tips**: add snapshot naming convention (snake_case)
    - **Conventions & patterns**: add code style bullet (Spotless, fluent
      setters, Javadoc) and porting guidance (CompletableFuture, Jackson)
    - **Integration & environment**: add pre-commit hook instructions
    - **Boundaries section** (new): document generated files that must not
      be hand-edited (`java/src/generated/java/`, `nodejs/src/generated/`,
      `test/snapshots/`)
    edburns authored May 23, 2026
    Configuration menu
    Copy the full SHA
    5e4f490 View commit details
    Browse the repository at this point in the history
  2. Java SDK: sync reference implementation to ^1.0.52-1, add `preMcpTo…

    …olCall` hook, fix `PingResponse` timestamp type (#1389)
    
    ## XL — Regenerated RPC types from `@github/copilot schema` update (288 files)
    
    Upgrading the reference implementation version from `^1.0.49-1` to `^1.0.52-1`
    required updating the `@github/copilot` npm package in `scripts/codegen/`, which
    brought in schema changes. The Java code generator (`java.ts`) was updated to
    handle these schema changes, and all generated types were regenerated.
    
    - 222 new generated RPC types under `src/generated/java/` (new API surfaces:
      `SessionEventLogApi`, `SessionMetadataApi`, `SessionQueueApi`, `SessionTasksApi`,
      `SessionUiApi`, `SessionOptionsApi`, `SessionLspApi`, `SessionMcpApi`,
      `SessionScheduleApi`, permission `location/path/URL` config types, and more)
    - 66 modified generated files (field type changes, new fields, new enum values)
    - Updated `scripts/codegen/java.ts` to handle new schema patterns
    - Updated `scripts/codegen/package.json` and `package-lock.json`
    
    These are all machine-generated. Human review should focus on the `java.ts`
    codegen script changes; the generated output can be spot-checked.
    
    ## M — Port `preMcpToolCall` hook (6 files)
    
    New hook that fires before an MCP tool call is dispatched to an MCP server,
    giving SDK consumers the ability to inspect or modify the call.
    
    - New: `PreMcpToolCallHandler.java` (functional interface)
    - New: `PreMcpToolCallHookInput.java` (input DTO with server name, tool name, arguments)
    - New: `PreMcpToolCallHookOutput.java` (output DTO with allow/deny/modify)
    - Modified: `SessionHooks.java` (added onPreMcpToolCall field, getter, setter, hasHooks check)
    - Modified: `CopilotSession.java` (dispatch "preMcpToolCall" hook name to handler)
    - New test: `PreMcpToolCallHookTest.java` (unit tests for the new hook)
    
    ## S — Fix `PingResponse` timestamp type (2 files)
    
    The CLI server changed the ping response timestamp from a numeric epoch
    (long) to an ISO 8601 string. Updated `PingResponse` record field from
    `long timestamp` to `String timestamp`, and updated `CopilotClientTest`
    accordingly.
    
    ## S — `SessionLogParams` constructor change (1 file)
    
    `SessionLogParams` gained new nullable fields in the schema. Updated the
    call site in `CopilotSession.log()` to pass the additional null parameters.
    
    ## S — Test maintenance (4 files)
    
    - `McpAndAgentsTest`: new E2E test for MCP and agents scenario
    - `PermissionsTest`: minor test adjustment
    - `SessionEventDeserializationTest`: updated assertions to match new generated types
    - `GeneratedRpcRecordsCoverageTest`: updated coverage list for new generated types
    
    ## S — Infra / metadata (3 files)
    
    - `.lastmerge`: updated to `f4d22d70016c377881d86e4c77f8a3f93746ffae`
    - `pom.xml`: ref-impl version property updated to `^1.0.52-1`
    - `.github/workflows/copilot-setup-steps.yml`: bump gh-aw setup-cli to `v0.74.8`
    edburns authored May 23, 2026
    Configuration menu
    Copy the full SHA
    9149379 View commit details
    Browse the repository at this point in the history
  3. Update @github/copilot to 1.0.52-4 (#1393)

    * Update @github/copilot to 1.0.52-4
    
    - Updated nodejs and test harness dependencies
    - Re-ran code generators
    - Formatted generated code
    
    * Fix Rust generation for map RPC results
    
    Emit Rust type aliases for top-level map-shaped schemas so generated RPC methods can return opaque object payloads like session.mcp.apps.callTool.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    3 people authored May 23, 2026
    Configuration menu
    Copy the full SHA
    e89a891 View commit details
    Browse the repository at this point in the history
  4. Update @github/copilot to 1.0.52 (#1405)

    - Updated nodejs and test harness dependencies
    - Re-ran code generators
    - Formatted generated code
    
    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored May 23, 2026
    Configuration menu
    Copy the full SHA
    a77e8ec View commit details
    Browse the repository at this point in the history

Commits on May 24, 2026

  1. Update @github/copilot to 1.0.53-2 (#1408)

    * Update @github/copilot to 1.0.53-2
    
    - Updated nodejs and test harness dependencies
    - Re-ran code generators
    - Formatted generated code
    
    * Fix Python RPC dataclass: keep canvas_json_schema required
    
    quicktype emits the freeform 'canvas_json_schema' field as 'Any', and the
    post-processor was adding '= None' to every bare ': Any' annotation. That
    turned the synthesized root RPC dataclass field into a defaulted argument
    followed by required fields (canvas_list, ...), which made Python raise
    'non-default argument follows default argument' at import time and broke
    every Python SDK test plus the scenario import checks.
    
    Scope the post-processor so RPC definition fields keep their required Any
    annotation, matching the rest of the registry.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: jmoseley <jemoseley@microsoft.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    3 people authored May 24, 2026
    Configuration menu
    Copy the full SHA
    08f0521 View commit details
    Browse the repository at this point in the history
  2. Add SDK canvas runtime support (#1401)

    * Add canvas runtime support to SDK
    
    Add Node extension canvas APIs and direct canvas provider callback routing. Add Rust canvas declarations, provider handlers, create/resume wiring, and host session.canvas APIs aligned with the runtime schema.
    
    Validation: nodejs typecheck/lint/tests; rust fmt/check/clippy; cargo test --all-features.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Add canvas provider RPC tracing
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Add extension info session option
    
    Expose stable extension identity metadata on Node and Rust session create/resume options and forward extensionInfo on the wire for canvas providers.
    
    Validation: nodejs typecheck/lint/vitest; rust fmt/clippy/test --all-features.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Expose canvas resume durability fields
    
    Add CanvasInstanceAvailability, OpenCanvasInstance availability, and resume openCanvases seeding support to the Rust SDK.
    
    Validation: cargo +nightly-2026-04-14 fmt --check; cargo clippy --all-features --all-targets -- -D warnings; cargo test --all-features.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Address canvas SDK review feedback
    
    Validate canvas provider request payloads before routing, surface Rust canvas serialization and builder errors, and clarify list_open RPC behavior.
    
    Validation: nodejs typecheck/lint/vitest; rust fmt/clippy/test --all-features.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Format Rust session imports
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Sync canvas tool surface docs
    
    Remove stale focus/close/reload canvas agent-tool references and cover custom-tool permission payload passthrough for open_canvas.
    
    Validation: nodejs typecheck; cargo test --all-features permission_request_data_extracts_typed_kind.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Require canvas descriptions
    
    Align canvas contribution and discovered canvas descriptions with the runtime schema, update canvas tool-surface docs, and cover open_canvas custom-tool permission payloads.
    
    Validation: nodejs typecheck/lint/vitest client+extension; rust fmt/clippy; cargo check --all-features --all-targets; targeted canvas and permission tests.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Require canvas instance availability
    
    Align OpenCanvasInstance with the runtime schema by making availability required and updating canvas host/resume tests.
    
    Validation: cargo check --all-features --all-targets; cargo test --all-features canvas; targeted session canvas tests.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Rename Node canvas open handler
    
    Rename the Node canvas provider option from onOpen to open and remove lifecycle handler options from the extension canvas API.
    
    Validation: nodejs typecheck; vitest client and extension tests.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Drop canvas toolbar and focus/reload surface
    
    Aligns the SDK canvas contract with copilot-agent-runtime
    jmoseley/adr-implementation-plan commits 85b23bc264 and acdefc1bc1:
    
    - Rename agentActions to actions on CanvasDeclaration and
      DiscoveredCanvas (Rust + Node).
    - Drop toolbar from CanvasContribution and CanvasOpenResponse, and
      remove CanvasToolbarItemDeclaration / CanvasToolbarItem entirely.
    - Drop SessionCanvas::focus and SessionCanvas::reload host APIs;
      re-opening with the same instanceId now drives focus via
      session.canvas.opened { reopen: true }, and reload is renderer-only.
    - Drop canvas.focus / canvas.reload provider JSON-RPC routes and the
      matching CanvasHandler::on_focus / on_reload hooks; canvas.close keeps
      its dedicated dispatch path.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Restore optional onClose handler on Node canvas options
    
    Lets extension authors observe canvas instance close events without
    adding back the dropped onFocus/onReload hooks. Fire-and-forget: the
    handler's return value is ignored and the provider response is still
    undefined.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Support per-action handlers on Node canvas actions
    
    Each entry in createCanvas({ actions }) may now carry its own optional
    handler, co-located with the action's metadata. The top-level onAction
    remains as a fallback for actions that don't define their own handler.
    
    Dispatch order:
      1. Per-action handler when set.
      2. Top-level onAction otherwise.
      3. canvas_action_no_handler if neither is wired.
    
    The handler closure is stripped from the wire CanvasDeclaration sent on
    session.create / session.resume; only the action's name, description,
    and inputSchema reach the runtime. A new CanvasAction authoring type
    sits on top of the existing CanvasAgentActionDeclaration wire type.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Drop top-level onAction fallback on Node canvases
    
    Per-action handlers are now the only dispatch path. Declared actions
    without a handler fall through to canvas_action_no_handler. Keeps the
    action's metadata and behavior co-located and removes a second
    indirection that always boiled down to a switch on actionName.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Normalize JSDoc style on CanvasAgentActionDeclaration
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Drop stale wire-rename guards from canvas declaration test
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Document canvas action dispatch divergence in Rust SDK
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Require handler on canvas actions
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Collapse CanvasAgentActionDeclaration into CanvasAction
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Drop debug log for inbound JSON-RPC requests
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Drop canvas debug logs
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Remove canvas tools field
    
    Drop CanvasToolDefinition, CanvasToolDefinitionDefer, and the
    CanvasOpenResponse.tools / OpenCanvasInstance.tools fields from both
    the Node and Rust SDKs. The CLI side is being removed in lockstep, so
    the wire contract no longer carries this field.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * rust: slim canvas surface to wire types + CanvasHandler
    
    Move per-canvas registry, Canvas builder, dispatch helpers, and the
    SessionCanvas host helper out of the SDK. The Rust canvas surface now
    matches the other typed extension points (PermissionHandler /
    UserInputHandler / HookHandler):
    
      SessionConfig
        .with_canvases([CanvasDeclaration, ...])
        .with_canvas_handler(Arc::new(MyHandler))
    
    Removed:
      - canvas::Canvas, CanvasBuilder (declaration+handler bundle)
      - canvas::CanvasRegistry, build_registry, dispatch_canvas_*
      - session::SessionCanvas + Session::canvas() accessor
        (callers move to session.rpc().canvas().*)
    
    Kept (the wire boundary + typed extension point):
      - All wire types (CanvasDeclaration, OpenCanvasInstance, ...)
      - CanvasHandler trait + on_open/on_action/on_close
      - SessionConfig/ResumeSessionConfig.canvases (now Vec<CanvasDeclaration>)
      - SessionConfig/ResumeSessionConfig.canvas_handler
    
    handle_request dispatches canvas.open/close/action.invoke directly to
    the handler; the per-canvas registry now lives in the app layer.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * rust: drop canvas wire types duplicated by codegen
    
    Removed CanvasInstanceAvailability, OpenCanvasInstance,
    CanvasAgentActionDeclaration (-> CanvasAction), CanvasDiscoverResult,
    DiscoveredCanvas, CanvasListOpenResult, CanvasOpenRequest,
    CanvasCloseRequest, CanvasInvokeActionRequest, and
    CanvasInvokeActionResult from canvas.rs; consumers import these from
    crate::generated::api_types directly. The remaining hand-written types
    (CanvasDeclaration, CanvasOpenResponse, handler trait, contexts,
    CanvasError) are genuinely additive provider-authoring contracts.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix broken intra-doc link to renamed CanvasAction type
    
    The canvas wire types were deduplicated against generated/api_types.rs,
    renaming CanvasAgentActionDeclaration to CanvasAction. A doc comment
    in canvas.rs still referenced the old name, which broke cargo doc on CI
    (broken_intra_doc_links is denied).
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * go: add canvas runtime support
    
    Mirrors the Rust SDK canvas surface in rust/src/canvas.rs:
    
    - CanvasDeclaration, CanvasOpenResponse, CanvasHostContext,
      CanvasOpenContext / CanvasActionContext / CanvasLifecycleContext,
      CanvasError, CanvasHandler interface + CanvasHandlerDefaults, and
      ExtensionInfo.
    - SessionConfig / ResumeSessionConfig: Canvases, RequestCanvasRenderer,
      RequestExtensions, CanvasHandler, ExtensionInfo.
    - Inbound JSON-RPC dispatch for canvas.open, canvas.close, and
      canvas.action.invoke, with a canvas_handler_unset error envelope when
      no handler is installed and a canvas_handler_error envelope when a
      handler returns a non-CanvasError error.
    - Session.OpenCanvases() surfaces the openCanvases snapshot from the
      session.resume response.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * python: add canvas runtime support
    
    Mirrors the Rust SDK design: callers declare canvases on session.create
    / session.resume, install a single CanvasHandler, and the SDK dispatches
    inbound canvas.open / canvas.close / canvas.action.invoke JSON-RPC
    requests to that handler. Resume populates session.open_canvases from
    the response. JSON-RPC dispatch was loosened to allow handlers to return
    any JSON value (canvas.action.invoke result is arbitrary JSON).
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * dotnet: add canvas runtime support
    
    Ports the canvas runtime surface from the Rust SDK to the .NET SDK so
    .NET hosts can declare canvases on session create/resume, advertise an
    extension identity, and handle inbound canvas.open / canvas.close /
    canvas.action.invoke RPC calls.
    
    * New public Canvas.cs surface (CanvasDeclaration, ExtensionInfo,
      CanvasOpenResponse, CanvasHostContext, lifecycle/action/open contexts,
      CanvasError, ICanvasHandler, CanvasHandlerBase). All marked
      [Experimental(GHCP001)].
    * SessionConfigBase gains Canvases, RequestCanvasRenderer,
      RequestExtensions, ExtensionInfo, CanvasHandler.
    * CreateSession/ResumeSession requests forward the new fields and
      surface OpenCanvases on the response. CopilotSession exposes the
      returned canvases via OpenCanvases.
    * CopilotClient registers canvas.open / canvas.close /
      canvas.action.invoke handlers and dispatches them to the session,
      which invokes the user's ICanvasHandler and returns structured
      CanvasError data via a new JsonRpc LocalRpcInvocationException path.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Address PR review: openCanvases parity + Node API divergence note
    
    - Node: add openCanvases accessor on CopilotSession and OpenCanvases
      field on ResumeSessionConfig so callers can both rehydrate from
      the resume response and pre-populate canvas state on resume.
    - Node: document why createCanvas/Canvas intentionally diverges from
      the per-session CanvasHandler pattern used by Rust/Python/Go/.NET.
    - Go: add ResumeSessionConfig.OpenCanvases, thread through to the
      resume request wire payload, and add a serialization test.
    - .NET: add ResumeSessionConfig.OpenCanvases, thread through to the
      internal ResumeSessionRequest record, and add a serialization test.
    
    Mirrors what Rust and Python already do, fixing wire-protocol parity
    across SDKs.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    jmoseley and Copilot authored May 24, 2026
    Configuration menu
    Copy the full SHA
    51043b1 View commit details
    Browse the repository at this point in the history
Loading