Skip to content

Tags: Navanit-git/copilot-sdk

Tags

v1.0.12-preview.0

Toggle v1.0.12-preview.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Update @github/copilot to 1.0.81-5 (github#2364)

* Update @github/copilot to 1.0.81-5

- Updated nodejs and test harness dependencies
- Re-ran code generators
- Formatted generated code

* Restore runtime-blocked test coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Keep ephemeral query coverage disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Fix Python denied-tool E2E race

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep .NET in-process CAPI legs disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep blocked in-process model suites excluded

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Split hanging macOS .NET test shard

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

---------

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 App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

rust/v1.0.12-preview.0

Toggle rust/v1.0.12-preview.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Update @github/copilot to 1.0.81-5 (github#2364)

* Update @github/copilot to 1.0.81-5

- Updated nodejs and test harness dependencies
- Re-ran code generators
- Formatted generated code

* Restore runtime-blocked test coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Keep ephemeral query coverage disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Fix Python denied-tool E2E race

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep .NET in-process CAPI legs disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep blocked in-process model suites excluded

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Split hanging macOS .NET test shard

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

---------

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 App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

java/v1.0.12-preview.0

Toggle java/v1.0.12-preview.0's commit message
[maven-release-plugin] copy for tag java/v1.0.12-preview.0

go/v1.0.12-preview.0

Toggle go/v1.0.12-preview.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Update @github/copilot to 1.0.81-5 (github#2364)

* Update @github/copilot to 1.0.81-5

- Updated nodejs and test harness dependencies
- Re-ran code generators
- Formatted generated code

* Restore runtime-blocked test coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Keep ephemeral query coverage disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Fix Python denied-tool E2E race

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep .NET in-process CAPI legs disabled

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Keep blocked in-process model suites excluded

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

* Split hanging macOS .NET test shard

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

---------

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 App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4e94289c-90c8-4664-a878-056539754908

v1.0.11

Toggle v1.0.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
sdk: Forward decisionContext on permission replies across languages (g…

…ithub#2294)

* feat(rust): forward decisionContext on permission replies

The runtime emits `auto_approval_decision` telemetry only when a client
supplies an explicit `decisionContext` alongside its permission reply.
The generated wire types already carry the optional field, but the
hand-written reply path built a fixed three-key JSON literal and had no
way for a PermissionHandler to attribute its decision.

Add `PermissionResult::AttributedDecision` plus a `with_context` builder,
and forward the context as a top-level sibling of `result`. When no
context is supplied the emitted params are byte-identical to before, so
legacy behavior is preserved exactly.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* sdk: Forward decisionContext on permission replies across languages

Permission handlers can now attach optional provenance describing how
and where a decision was reached. The SDK forwards it to the runtime as
a sibling of `result` -- never nested inside it -- so auto-approval
decisions made programmatically can be attributed.

The wire schema and every language's generated types already accepted
the field; only the hand-written reply paths never populated it. No
schema, codegen, or protocol version change is required.

Fully additive: handlers returning a plain decision emit a payload
byte-identical to before, with no `decisionContext` key at all.
No-result suppression is preserved in every language.

Per CONTRIBUTING.md, the feature is implemented in sync across all six
SDKs:

- Rust:   PermissionResult::AttributedDecision + with_context()
- Node:   AttributedPermissionResult + withDecisionContext()
- Python: AttributedPermissionResult + with_decision_context()
- Go:     AttributedPermissionResult + WithDecisionContext()
- .NET:   PermissionDecision.WithContext()
- Java:   PermissionRequestResult.withContext()

Each language gains focused unit tests asserting the sibling placement,
the byte-identical legacy payload, replace-not-nest on re-application,
and preserved no-result suppression. Node and Rust add end-to-end
coverage against a CLI carrying the runtime-side support.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Reject null in withContext to match the other SDKs

Java accepted null as a "clear" operation while .NET rejects it and the
other SDKs disallow it at the type level. Since null is Java's default,
an uninitialized variable would have silently dropped the context --
producing exactly the unattributed telemetry this feature removes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Unwrap value-form attribution in Go and seal the Rust enum

Go embedded the decision interface in AttributedPermissionResult, which
promotes the interface methods to the value type. A handler returning
`*WithDecisionContext(...)` therefore satisfied rpc.PermissionDecision
but slipped past the pointer-only type assertion: the wrapper itself was
sent as `result` and the context was silently dropped. Both the unwrap
in the session and the replace-not-nest check now accept either form,
with regression tests that fail against the pointer-only code.

Rust PermissionResult gains #[non_exhaustive], matching the convention
used throughout this crate, so downstream exhaustive matches keep
compiling as variants are added.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(dotnet): Drop fluent WithContext in favor of the settable property

The hand-written .NET SDK has no other fluent `With*` builders, so adding
one here introduced a pattern that exists nowhere else in the surface.
Java and Rust keep their fluent forms because those match long-standing
convention in each of those SDKs.

Callers now set the public `DecisionContext` property through an object
initializer, which is what the class documentation already recommends for
richer decisions. The wire format is unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Name attribution helpers after each SDK's own conventions

The Go, Node, and Python helpers were named `WithDecisionContext` and
friends, a shape none of those SDKs use. In Go a `WithX` function
conventionally builds a functional option rather than decorating a value,
and there were no `With` functions in the package at all. Node and Python
had no `with`-prefixed helper either.

Each now follows the constructor naming its own SDK already uses:
`NewAttributedPermissionResult` alongside `NewCanvasError`,
`createAttributedPermissionResult` alongside `createCanvas`, and
`create_attributed_permission_result` alongside
`create_session_fs_adapter`.

The Node wrapper also gains a `kind: "attributed"` discriminant so it is
narrowed the same way as every other union in that SDK, instead of by
testing for the presence of a property.

Java and Rust keep their fluent methods, which match long-standing
convention in each of those SDKs. Behavior and wire format are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(go): Centralize attribution unwrapping in one helper

The pointer/value type switch was duplicated verbatim in
NewAttributedPermissionResult and the session permission dispatch.
Embedding an interface promotes its methods to the value type too, so
both forms satisfy rpc.PermissionDecision and both must be unwrapped --
missing the value case is what produced the bug caught in review.

Fold both copies into splitAttribution so that hazard is stated and
handled in exactly one place.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Rename withContext to setDecisionContext

The Java SDK uses setX for mutators (589 of them); withX appears twice
and both return a copy rather than mutating in place. withContext was
the odd one out on both counts, and did not match its own getter or the
sibling setKind/setRules/setFeedback on this class.

Also drop the requireNonNull. The other setters here do not null-check,
and null now means "no context" in every other SDK, so throwing made
Java the outlier rather than the consistent one.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(rust): Make AttributedDecision a struct-style variant

Hand-written Rust here has 157 enum variants: 89 unit, 35 tuple with
exactly one payload, and 33 struct-style. Every variant carrying two or
more values uses the struct form, so a two-payload tuple was the only
one of its kind.

Name the payloads instead. Construction and both read sites now say
which value they mean rather than relying on position.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Preserve Rust permission handler compatibility

Add a separate attributed permission handler path so clients can forward decision context without changing the existing PermissionResult enum or PermissionHandler contract.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Simplify Rust permission attribution

Keep PermissionHandler as the single dispatch API and carry decision context through PermissionResult. Replace the ineffective rejection E2E test with an exact fake-server wire assertion.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Unify Rust permission decisions

Store optional decision context on the existing Decision variant so every decision follows one semantic path and downstream matches receive a compiler-guided migration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

---------

Co-authored-by: Aymen Furter <aymenfurter@Midnight-Moon.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

rust/v1.0.11

Toggle rust/v1.0.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
sdk: Forward decisionContext on permission replies across languages (g…

…ithub#2294)

* feat(rust): forward decisionContext on permission replies

The runtime emits `auto_approval_decision` telemetry only when a client
supplies an explicit `decisionContext` alongside its permission reply.
The generated wire types already carry the optional field, but the
hand-written reply path built a fixed three-key JSON literal and had no
way for a PermissionHandler to attribute its decision.

Add `PermissionResult::AttributedDecision` plus a `with_context` builder,
and forward the context as a top-level sibling of `result`. When no
context is supplied the emitted params are byte-identical to before, so
legacy behavior is preserved exactly.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* sdk: Forward decisionContext on permission replies across languages

Permission handlers can now attach optional provenance describing how
and where a decision was reached. The SDK forwards it to the runtime as
a sibling of `result` -- never nested inside it -- so auto-approval
decisions made programmatically can be attributed.

The wire schema and every language's generated types already accepted
the field; only the hand-written reply paths never populated it. No
schema, codegen, or protocol version change is required.

Fully additive: handlers returning a plain decision emit a payload
byte-identical to before, with no `decisionContext` key at all.
No-result suppression is preserved in every language.

Per CONTRIBUTING.md, the feature is implemented in sync across all six
SDKs:

- Rust:   PermissionResult::AttributedDecision + with_context()
- Node:   AttributedPermissionResult + withDecisionContext()
- Python: AttributedPermissionResult + with_decision_context()
- Go:     AttributedPermissionResult + WithDecisionContext()
- .NET:   PermissionDecision.WithContext()
- Java:   PermissionRequestResult.withContext()

Each language gains focused unit tests asserting the sibling placement,
the byte-identical legacy payload, replace-not-nest on re-application,
and preserved no-result suppression. Node and Rust add end-to-end
coverage against a CLI carrying the runtime-side support.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Reject null in withContext to match the other SDKs

Java accepted null as a "clear" operation while .NET rejects it and the
other SDKs disallow it at the type level. Since null is Java's default,
an uninitialized variable would have silently dropped the context --
producing exactly the unattributed telemetry this feature removes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Unwrap value-form attribution in Go and seal the Rust enum

Go embedded the decision interface in AttributedPermissionResult, which
promotes the interface methods to the value type. A handler returning
`*WithDecisionContext(...)` therefore satisfied rpc.PermissionDecision
but slipped past the pointer-only type assertion: the wrapper itself was
sent as `result` and the context was silently dropped. Both the unwrap
in the session and the replace-not-nest check now accept either form,
with regression tests that fail against the pointer-only code.

Rust PermissionResult gains #[non_exhaustive], matching the convention
used throughout this crate, so downstream exhaustive matches keep
compiling as variants are added.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(dotnet): Drop fluent WithContext in favor of the settable property

The hand-written .NET SDK has no other fluent `With*` builders, so adding
one here introduced a pattern that exists nowhere else in the surface.
Java and Rust keep their fluent forms because those match long-standing
convention in each of those SDKs.

Callers now set the public `DecisionContext` property through an object
initializer, which is what the class documentation already recommends for
richer decisions. The wire format is unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Name attribution helpers after each SDK's own conventions

The Go, Node, and Python helpers were named `WithDecisionContext` and
friends, a shape none of those SDKs use. In Go a `WithX` function
conventionally builds a functional option rather than decorating a value,
and there were no `With` functions in the package at all. Node and Python
had no `with`-prefixed helper either.

Each now follows the constructor naming its own SDK already uses:
`NewAttributedPermissionResult` alongside `NewCanvasError`,
`createAttributedPermissionResult` alongside `createCanvas`, and
`create_attributed_permission_result` alongside
`create_session_fs_adapter`.

The Node wrapper also gains a `kind: "attributed"` discriminant so it is
narrowed the same way as every other union in that SDK, instead of by
testing for the presence of a property.

Java and Rust keep their fluent methods, which match long-standing
convention in each of those SDKs. Behavior and wire format are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(go): Centralize attribution unwrapping in one helper

The pointer/value type switch was duplicated verbatim in
NewAttributedPermissionResult and the session permission dispatch.
Embedding an interface promotes its methods to the value type too, so
both forms satisfy rpc.PermissionDecision and both must be unwrapped --
missing the value case is what produced the bug caught in review.

Fold both copies into splitAttribution so that hazard is stated and
handled in exactly one place.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Rename withContext to setDecisionContext

The Java SDK uses setX for mutators (589 of them); withX appears twice
and both return a copy rather than mutating in place. withContext was
the odd one out on both counts, and did not match its own getter or the
sibling setKind/setRules/setFeedback on this class.

Also drop the requireNonNull. The other setters here do not null-check,
and null now means "no context" in every other SDK, so throwing made
Java the outlier rather than the consistent one.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(rust): Make AttributedDecision a struct-style variant

Hand-written Rust here has 157 enum variants: 89 unit, 35 tuple with
exactly one payload, and 33 struct-style. Every variant carrying two or
more values uses the struct form, so a two-payload tuple was the only
one of its kind.

Name the payloads instead. Construction and both read sites now say
which value they mean rather than relying on position.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Preserve Rust permission handler compatibility

Add a separate attributed permission handler path so clients can forward decision context without changing the existing PermissionResult enum or PermissionHandler contract.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Simplify Rust permission attribution

Keep PermissionHandler as the single dispatch API and carry decision context through PermissionResult. Replace the ineffective rejection E2E test with an exact fake-server wire assertion.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Unify Rust permission decisions

Store optional decision context on the existing Decision variant so every decision follows one semantic path and downstream matches receive a compiler-guided migration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

---------

Co-authored-by: Aymen Furter <aymenfurter@Midnight-Moon.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

java/v1.0.11

Toggle java/v1.0.11's commit message
[maven-release-plugin] copy for tag java/v1.0.11

go/v1.0.11

Toggle go/v1.0.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
sdk: Forward decisionContext on permission replies across languages (g…

…ithub#2294)

* feat(rust): forward decisionContext on permission replies

The runtime emits `auto_approval_decision` telemetry only when a client
supplies an explicit `decisionContext` alongside its permission reply.
The generated wire types already carry the optional field, but the
hand-written reply path built a fixed three-key JSON literal and had no
way for a PermissionHandler to attribute its decision.

Add `PermissionResult::AttributedDecision` plus a `with_context` builder,
and forward the context as a top-level sibling of `result`. When no
context is supplied the emitted params are byte-identical to before, so
legacy behavior is preserved exactly.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* sdk: Forward decisionContext on permission replies across languages

Permission handlers can now attach optional provenance describing how
and where a decision was reached. The SDK forwards it to the runtime as
a sibling of `result` -- never nested inside it -- so auto-approval
decisions made programmatically can be attributed.

The wire schema and every language's generated types already accepted
the field; only the hand-written reply paths never populated it. No
schema, codegen, or protocol version change is required.

Fully additive: handlers returning a plain decision emit a payload
byte-identical to before, with no `decisionContext` key at all.
No-result suppression is preserved in every language.

Per CONTRIBUTING.md, the feature is implemented in sync across all six
SDKs:

- Rust:   PermissionResult::AttributedDecision + with_context()
- Node:   AttributedPermissionResult + withDecisionContext()
- Python: AttributedPermissionResult + with_decision_context()
- Go:     AttributedPermissionResult + WithDecisionContext()
- .NET:   PermissionDecision.WithContext()
- Java:   PermissionRequestResult.withContext()

Each language gains focused unit tests asserting the sibling placement,
the byte-identical legacy payload, replace-not-nest on re-application,
and preserved no-result suppression. Node and Rust add end-to-end
coverage against a CLI carrying the runtime-side support.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Reject null in withContext to match the other SDKs

Java accepted null as a "clear" operation while .NET rejects it and the
other SDKs disallow it at the type level. Since null is Java's default,
an uninitialized variable would have silently dropped the context --
producing exactly the unattributed telemetry this feature removes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Unwrap value-form attribution in Go and seal the Rust enum

Go embedded the decision interface in AttributedPermissionResult, which
promotes the interface methods to the value type. A handler returning
`*WithDecisionContext(...)` therefore satisfied rpc.PermissionDecision
but slipped past the pointer-only type assertion: the wrapper itself was
sent as `result` and the context was silently dropped. Both the unwrap
in the session and the replace-not-nest check now accept either form,
with regression tests that fail against the pointer-only code.

Rust PermissionResult gains #[non_exhaustive], matching the convention
used throughout this crate, so downstream exhaustive matches keep
compiling as variants are added.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(dotnet): Drop fluent WithContext in favor of the settable property

The hand-written .NET SDK has no other fluent `With*` builders, so adding
one here introduced a pattern that exists nowhere else in the surface.
Java and Rust keep their fluent forms because those match long-standing
convention in each of those SDKs.

Callers now set the public `DecisionContext` property through an object
initializer, which is what the class documentation already recommends for
richer decisions. The wire format is unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk: Name attribution helpers after each SDK's own conventions

The Go, Node, and Python helpers were named `WithDecisionContext` and
friends, a shape none of those SDKs use. In Go a `WithX` function
conventionally builds a functional option rather than decorating a value,
and there were no `With` functions in the package at all. Node and Python
had no `with`-prefixed helper either.

Each now follows the constructor naming its own SDK already uses:
`NewAttributedPermissionResult` alongside `NewCanvasError`,
`createAttributedPermissionResult` alongside `createCanvas`, and
`create_attributed_permission_result` alongside
`create_session_fs_adapter`.

The Node wrapper also gains a `kind: "attributed"` discriminant so it is
narrowed the same way as every other union in that SDK, instead of by
testing for the presence of a property.

Java and Rust keep their fluent methods, which match long-standing
convention in each of those SDKs. Behavior and wire format are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(go): Centralize attribution unwrapping in one helper

The pointer/value type switch was duplicated verbatim in
NewAttributedPermissionResult and the session permission dispatch.
Embedding an interface promotes its methods to the value type too, so
both forms satisfy rpc.PermissionDecision and both must be unwrapped --
missing the value case is what produced the bug caught in review.

Fold both copies into splitAttribution so that hazard is stated and
handled in exactly one place.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(java): Rename withContext to setDecisionContext

The Java SDK uses setX for mutators (589 of them); withX appears twice
and both return a copy rather than mutating in place. withContext was
the odd one out on both counts, and did not match its own getter or the
sibling setKind/setRules/setFeedback on this class.

Also drop the requireNonNull. The other setters here do not null-check,
and null now means "no context" in every other SDK, so throwing made
Java the outlier rather than the consistent one.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* sdk(rust): Make AttributedDecision a struct-style variant

Hand-written Rust here has 157 enum variants: 89 unit, 35 tuple with
exactly one payload, and 33 struct-style. Every variant carrying two or
more values uses the struct form, so a two-payload tuple was the only
one of its kind.

Name the payloads instead. Construction and both read sites now say
which value they mean rather than relying on position.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Preserve Rust permission handler compatibility

Add a separate attributed permission handler path so clients can forward decision context without changing the existing PermissionResult enum or PermissionHandler contract.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Simplify Rust permission attribution

Keep PermissionHandler as the single dispatch API and carry decision context through PermissionResult. Replace the ineffective rejection E2E test with an exact fake-server wire assertion.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

* Unify Rust permission decisions

Store optional decision context on the existing Decision variant so every decision follows one semantic path and downstream matches receive a compiler-guided migration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

---------

Co-authored-by: Aymen Furter <aymenfurter@Midnight-Moon.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 79152db2-4cc7-4777-983a-655fae5b68c9

v1.0.11-preview.2

Toggle v1.0.11-preview.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
test(java): skip linux runtime tests on other platforms (github#2325)

rust/v1.0.11-preview.2

Toggle rust/v1.0.11-preview.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
test(java): skip linux runtime tests on other platforms (github#2325)