Skip to content

Commit f1b974e

Browse files
Cross-SDK: derive requestPermission from handler presence on session.create
TS, C#, Go, and Python all currently hardcoded requestPermission: true on session.create regardless of whether the caller supplied an onPermissionRequest handler. (Resume / join paths already derived from handler presence.) The runtime supports the presence-derived shape: when no client opts in via requestPermission=true, the session short-circuits permission prompts with user-not-available instead of broadcasting. So the hardcoded true forced the runtime to broadcast permission events to clients that would never respond, wasting a roundtrip and creating a discrepancy between create and resume. Aligns all four SDKs to: requestPermission := onPermissionRequest != null on both session.create and session.resume. (Rust will land the same shape in its API-review-fixes commit on this branch.) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent f0fc862 commit f1b974e

4 files changed

Lines changed: 13 additions & 9 deletions

File tree

dotnet/src/Client.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ public async Task<CopilotSession> CreateSessionAsync(SessionConfig config, Cance
594594
config.ExcludedTools,
595595
config.Provider,
596596
config.EnableSessionTelemetry,
597-
(bool?)true,
597+
config.OnPermissionRequest != null ? true : null,
598598
config.OnUserInputRequest != null ? true : null,
599599
config.OnExitPlanModeRequest != null ? true : null,
600600
config.OnAutoModeSwitchRequest != null ? true : null,
@@ -752,7 +752,7 @@ public async Task<CopilotSession> ResumeSessionAsync(string sessionId, ResumeSes
752752
config.ExcludedTools,
753753
config.Provider,
754754
config.EnableSessionTelemetry,
755-
(bool?)true,
755+
config.OnPermissionRequest != null ? true : null,
756756
config.OnUserInputRequest != null ? true : null,
757757
config.OnExitPlanModeRequest != null ? true : null,
758758
config.OnAutoModeSwitchRequest != null ? true : null,

go/client.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,9 @@ func (c *Client) CreateSession(ctx context.Context, config *SessionConfig) (*Ses
665665
config.Hooks.OnErrorOccurred != nil) {
666666
req.Hooks = Bool(true)
667667
}
668-
req.RequestPermission = Bool(true)
668+
if config.OnPermissionRequest != nil {
669+
req.RequestPermission = Bool(true)
670+
}
669671

670672
traceparent, tracestate := getTraceContext(ctx)
671673
req.Traceparent = traceparent
@@ -839,7 +841,9 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string,
839841
req.InfiniteSessions = config.InfiniteSessions
840842
req.GitHubToken = config.GitHubToken
841843
req.RemoteSession = config.RemoteSession
842-
req.RequestPermission = Bool(true)
844+
if config.OnPermissionRequest != nil {
845+
req.RequestPermission = Bool(true)
846+
}
843847

844848
if len(config.Commands) > 0 {
845849
cmds := make([]wireCommand, 0, len(config.Commands))

nodejs/src/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,7 @@ export class CopilotClient {
830830
provider: config.provider,
831831
enableSessionTelemetry: config.enableSessionTelemetry,
832832
modelCapabilities: config.modelCapabilities,
833-
requestPermission: true,
833+
requestPermission: !!config.onPermissionRequest,
834834
requestUserInput: !!config.onUserInputRequest,
835835
requestElicitation: !!config.onElicitationRequest,
836836
requestExitPlanMode: !!config.onExitPlanModeRequest,

python/copilot/client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1493,8 +1493,8 @@ async def create_session(
14931493
if excluded_tools is not None:
14941494
payload["excludedTools"] = excluded_tools
14951495

1496-
# Always enable permission request callback
1497-
payload["requestPermission"] = True
1496+
# Enable permission request callback if handler provided
1497+
payload["requestPermission"] = bool(on_permission_request)
14981498

14991499
# Enable user input request callback if handler provided
15001500
if on_user_input_request:
@@ -1888,8 +1888,8 @@ async def resume_session(
18881888
else True
18891889
)
18901890

1891-
# Always enable permission request callback
1892-
payload["requestPermission"] = True
1891+
# Enable permission request callback if handler provided
1892+
payload["requestPermission"] = bool(on_permission_request)
18931893

18941894
if on_user_input_request:
18951895
payload["requestUserInput"] = True

0 commit comments

Comments
 (0)