Skip to content

Commit d5d5c0b

Browse files
stephentoubCopilot
andcommitted
Fix SDK code for 1.0.65 canvas API changes
CLI 1.0.65 removed the canvas 'availability' and 'reopen' fields (and the CanvasInstanceAvailability/CanvasOpenedAvailability enums) and added a 'capi' field to SessionOptionsUpdateParams. Update hand-written SDK source and unit tests across all languages to match the regenerated types. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent d87bd4c commit d5d5c0b

14 files changed

Lines changed: 58 additions & 155 deletions

File tree

dotnet/src/Session.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -911,22 +911,19 @@ private void UpdateOpenCanvasesFromEvent(SessionEvent sessionEvent)
911911
var data = canvasEvent.Data;
912912
if (string.IsNullOrEmpty(data.InstanceId)
913913
|| string.IsNullOrEmpty(data.CanvasId)
914-
|| string.IsNullOrEmpty(data.ExtensionId)
915-
|| string.IsNullOrEmpty(data.Availability.Value))
914+
|| string.IsNullOrEmpty(data.ExtensionId))
916915
{
917916
_logger.LogWarning("failed to deserialize session.canvas.opened payload");
918917
return;
919918
}
920919

921920
UpsertOpenCanvas(new OpenCanvasInstance
922921
{
923-
Availability = new CanvasInstanceAvailability(data.Availability.Value),
924922
CanvasId = data.CanvasId,
925923
ExtensionId = data.ExtensionId,
926924
ExtensionName = data.ExtensionName,
927925
Input = data.Input,
928926
InstanceId = data.InstanceId,
929-
Reopen = data.Reopen,
930927
Status = data.Status,
931928
Title = data.Title,
932929
Url = data.Url,

dotnet/test/Unit/CanvasTests.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,9 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
150150
Timestamp = DateTimeOffset.UtcNow,
151151
Data = new SessionCanvasOpenedData
152152
{
153-
Availability = CanvasOpenedAvailability.Ready,
154153
CanvasId = "",
155154
ExtensionId = "project:counter",
156155
InstanceId = "missing-canvas-id",
157-
Reopen = false,
158156
}
159157
});
160158
DispatchEvent(session, new SessionCanvasOpenedEvent
@@ -163,7 +161,6 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
163161
Timestamp = DateTimeOffset.UtcNow,
164162
Data = new SessionCanvasOpenedData
165163
{
166-
Availability = CanvasOpenedAvailability.Ready,
167164
CanvasId = "counter",
168165
ExtensionId = "project:counter",
169166
ExtensionName = "Counter Provider",
@@ -172,7 +169,6 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
172169
Status = "ready",
173170
Url = "https://example.test/counter",
174171
Input = JsonDocument.Parse("""{"seed":1}""").RootElement.Clone(),
175-
Reopen = false,
176172
}
177173
});
178174
DispatchEvent(session, new SessionCanvasOpenedEvent
@@ -181,12 +177,10 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
181177
Timestamp = DateTimeOffset.UtcNow,
182178
Data = new SessionCanvasOpenedData
183179
{
184-
Availability = CanvasOpenedAvailability.Stale,
185180
CanvasId = "logs",
186181
ExtensionId = "project:logs",
187182
InstanceId = "logs-1",
188183
Title = "Logs",
189-
Reopen = false,
190184
}
191185
});
192186

@@ -201,7 +195,6 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
201195
Timestamp = DateTimeOffset.UtcNow,
202196
Data = new SessionCanvasOpenedData
203197
{
204-
Availability = CanvasOpenedAvailability.Stale,
205198
CanvasId = "counter",
206199
ExtensionId = "project:counter",
207200
ExtensionName = "Counter Provider",
@@ -210,7 +203,6 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
210203
Status = "reconnected",
211204
Url = "https://example.test/counter-updated",
212205
Input = JsonDocument.Parse("""{"seed":2}""").RootElement.Clone(),
213-
Reopen = true,
214206
}
215207
});
216208

@@ -222,8 +214,6 @@ public void SessionCanvasOpenedEvent_UpdatesOpenCanvasSnapshots()
222214
Assert.Equal("Counter Updated", canvas.Title);
223215
Assert.Equal("reconnected", canvas.Status);
224216
Assert.Equal("https://example.test/counter-updated", canvas.Url);
225-
Assert.True(canvas.Reopen);
226-
Assert.Equal(CanvasInstanceAvailability.Stale, canvas.Availability);
227217
Assert.Equal(2, canvas.Input!.Value.GetProperty("seed").GetInt32());
228218
},
229219
canvas => Assert.Equal("logs-1", canvas.InstanceId));
@@ -240,12 +230,10 @@ public void SessionCanvasClosedEvent_RemovesOpenCanvasSnapshots()
240230
Timestamp = DateTimeOffset.UtcNow,
241231
Data = new SessionCanvasOpenedData
242232
{
243-
Availability = CanvasOpenedAvailability.Ready,
244233
CanvasId = "counter",
245234
ExtensionId = "project:counter",
246235
InstanceId = "counter-1",
247236
Title = "Counter",
248-
Reopen = false,
249237
}
250238
});
251239
DispatchEvent(session, new SessionCanvasOpenedEvent
@@ -254,12 +242,10 @@ public void SessionCanvasClosedEvent_RemovesOpenCanvasSnapshots()
254242
Timestamp = DateTimeOffset.UtcNow,
255243
Data = new SessionCanvasOpenedData
256244
{
257-
Availability = CanvasOpenedAvailability.Ready,
258245
CanvasId = "logs",
259246
ExtensionId = "project:logs",
260247
InstanceId = "logs-1",
261248
Title = "Logs",
262-
Reopen = false,
263249
}
264250
});
265251

dotnet/test/Unit/SerializationTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,6 @@ public void ResumeSessionRequest_CanSerializeOpenCanvases_WithSdkOptions()
635635
CanvasId = "canvas-id",
636636
ExtensionId = "ext-id",
637637
InstanceId = "instance-1",
638-
Availability = CanvasInstanceAvailability.Ready,
639638
},
640639
};
641640
var request = CreateInternalRequest(

go/canvas_test.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,9 @@ func TestCanvasResumeSessionResponse_OpenCanvasesParse(t *testing.T) {
310310
"workspacePath": "/tmp/ws",
311311
"openCanvases": [
312312
{
313-
"availability": "ready",
314313
"canvasId": "echo",
315314
"extensionId": "project:echo",
316-
"instanceId": "echo-1",
317-
"reopen": false
315+
"instanceId": "echo-1"
318316
}
319317
]
320318
}`)
@@ -343,11 +341,9 @@ func TestCanvasResumeSessionRequest_OpenCanvasesWireShape(t *testing.T) {
343341
SessionID: "s1",
344342
OpenCanvases: []rpc.OpenCanvasInstance{
345343
{
346-
Availability: "ready",
347-
CanvasID: "echo",
348-
ExtensionID: "project:echo",
349-
InstanceID: "echo-1",
350-
Reopen: false,
344+
CanvasID: "echo",
345+
ExtensionID: "project:echo",
346+
InstanceID: "echo-1",
351347
},
352348
},
353349
}

go/session.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,16 @@ func (s *Session) removeOpenCanvas(instanceID string) {
146146
func (s *Session) updateOpenCanvasesFromEvent(event SessionEvent) {
147147
switch data := event.Data.(type) {
148148
case *SessionCanvasOpenedData:
149-
if data.InstanceID == "" || data.CanvasID == "" || data.ExtensionID == "" || data.Availability == "" {
149+
if data.InstanceID == "" || data.CanvasID == "" || data.ExtensionID == "" {
150150
fmt.Printf("failed to deserialize session.canvas.opened payload\n")
151151
return
152152
}
153153
s.upsertOpenCanvas(rpc.OpenCanvasInstance{
154-
Availability: rpc.CanvasInstanceAvailability(data.Availability),
155154
CanvasID: data.CanvasID,
156155
ExtensionID: data.ExtensionID,
157156
ExtensionName: data.ExtensionName,
158157
Input: data.Input,
159158
InstanceID: data.InstanceID,
160-
Reopen: data.Reopen,
161159
Status: data.Status,
162160
Title: data.Title,
163161
URL: data.URL,

go/session_test.go

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,8 @@ func TestSession_Capabilities(t *testing.T) {
583583

584584
session.dispatchEvent(SessionEvent{
585585
Data: &SessionCanvasOpenedData{
586-
InstanceID: "missing-canvas-id",
587-
ExtensionID: "project:counter",
588-
Availability: CanvasOpenedAvailabilityReady,
586+
InstanceID: "missing-canvas-id",
587+
ExtensionID: "project:counter",
589588
},
590589
})
591590
session.dispatchEvent(SessionEvent{
@@ -598,18 +597,14 @@ func TestSession_Capabilities(t *testing.T) {
598597
Status: ptr("ready"),
599598
URL: ptr("https://example.test/counter"),
600599
Input: map[string]any{"seed": float64(1)},
601-
Reopen: false,
602-
Availability: CanvasOpenedAvailabilityReady,
603600
},
604601
})
605602
session.dispatchEvent(SessionEvent{
606603
Data: &SessionCanvasOpenedData{
607-
ExtensionID: "project:logs",
608-
CanvasID: "logs",
609-
InstanceID: "logs-1",
610-
Title: ptr("Logs"),
611-
Reopen: false,
612-
Availability: CanvasOpenedAvailabilityStale,
604+
ExtensionID: "project:logs",
605+
CanvasID: "logs",
606+
InstanceID: "logs-1",
607+
Title: ptr("Logs"),
613608
},
614609
})
615610

@@ -631,8 +626,6 @@ func TestSession_Capabilities(t *testing.T) {
631626
Status: ptr("reconnected"),
632627
URL: ptr("https://example.test/counter-updated"),
633628
Input: map[string]any{"seed": float64(2)},
634-
Reopen: true,
635-
Availability: CanvasOpenedAvailabilityStale,
636629
},
637630
})
638631

@@ -652,12 +645,6 @@ func TestSession_Capabilities(t *testing.T) {
652645
if open[0].URL == nil || *open[0].URL != "https://example.test/counter-updated" {
653646
t.Fatalf("expected updated URL, got %+v", open[0].URL)
654647
}
655-
if !open[0].Reopen {
656-
t.Fatal("expected reopen to be true")
657-
}
658-
if string(open[0].Availability) != string(CanvasOpenedAvailabilityStale) {
659-
t.Fatalf("expected stale availability, got %q", open[0].Availability)
660-
}
661648
})
662649

663650
t.Run("session.canvas.closed event removes open canvas snapshots", func(t *testing.T) {
@@ -666,20 +653,18 @@ func TestSession_Capabilities(t *testing.T) {
666653

667654
session.dispatchEvent(SessionEvent{
668655
Data: &SessionCanvasOpenedData{
669-
ExtensionID: "project:counter",
670-
CanvasID: "counter",
671-
InstanceID: "counter-1",
672-
Title: ptr("Counter"),
673-
Availability: CanvasOpenedAvailabilityReady,
656+
ExtensionID: "project:counter",
657+
CanvasID: "counter",
658+
InstanceID: "counter-1",
659+
Title: ptr("Counter"),
674660
},
675661
})
676662
session.dispatchEvent(SessionEvent{
677663
Data: &SessionCanvasOpenedData{
678-
ExtensionID: "project:logs",
679-
CanvasID: "logs",
680-
InstanceID: "logs-1",
681-
Title: ptr("Logs"),
682-
Availability: CanvasOpenedAvailabilityReady,
664+
ExtensionID: "project:logs",
665+
CanvasID: "logs",
666+
InstanceID: "logs-1",
667+
Title: ptr("Logs"),
683668
},
684669
})
685670

java/src/main/java/com/github/copilot/CopilotClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,7 @@ CompletableFuture<Void> updateSessionOptionsForMode(CopilotSession session, Bool
875875
null, // featureFlags
876876
null, // isExperimentalMode
877877
null, // provider
878+
null, // capi
878879
null, // workingDirectory
879880
null, // availableTools
880881
null, // excludedTools

java/src/main/java/com/github/copilot/CopilotSession.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import com.github.copilot.generated.SessionErrorEvent;
5656
import com.github.copilot.generated.SessionEvent;
5757
import com.github.copilot.generated.SessionIdleEvent;
58-
import com.github.copilot.generated.rpc.CanvasInstanceAvailability;
5958
import com.github.copilot.generated.rpc.OpenCanvasInstance;
6059
import com.github.copilot.rpc.AgentInfo;
6160
import com.github.copilot.rpc.AutoModeSwitchHandler;
@@ -1454,13 +1453,12 @@ private void updateOpenCanvasesFromEvent(SessionEvent event) {
14541453
if (event instanceof SessionCanvasOpenedEvent openedEvent) {
14551454
var data = openedEvent.getData();
14561455
if (data == null || isNullOrEmpty(data.instanceId()) || isNullOrEmpty(data.canvasId())
1457-
|| isNullOrEmpty(data.extensionId()) || data.availability() == null) {
1456+
|| isNullOrEmpty(data.extensionId())) {
14581457
LOG.warning("failed to deserialize session.canvas.opened payload");
14591458
return;
14601459
}
14611460
upsertOpenCanvas(new OpenCanvasInstance(data.instanceId(), data.extensionId(), data.extensionName(),
1462-
data.canvasId(), data.title(), data.status(), data.url(), data.input(), data.reopen(),
1463-
CanvasInstanceAvailability.fromValue(data.availability().getValue())));
1461+
data.canvasId(), data.title(), data.status(), data.url(), data.input()));
14641462
}
14651463
}
14661464

0 commit comments

Comments
 (0)