Skip to content

Commit ef219e7

Browse files
Fix Go and Python for consistent Result suffix types
- Go: Update session_fs_test.go handler signatures to return (*Result, error) for WriteFile, AppendFile, Mkdir, Rm, Rename (previously just error) - Go: Fix Stat field types (int64, time.Time) and Timestamp format verb - Go: Remove void-result assertions on Mode.Set - Python: Fix import sort order in session.py Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8808493 commit ef219e7

3 files changed

Lines changed: 28 additions & 31 deletions

File tree

go/internal/e2e/rpc_test.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestRpc(t *testing.T) {
3636
}
3737

3838
if result.Timestamp < 0 {
39-
t.Errorf("Expected timestamp >= 0, got %f", result.Timestamp)
39+
t.Errorf("Expected timestamp >= 0, got %d", result.Timestamp)
4040
}
4141

4242
if err := client.Stop(); err != nil {
@@ -223,13 +223,10 @@ func TestSessionRpc(t *testing.T) {
223223
}
224224

225225
// Switch to plan mode
226-
planResult, err := session.RPC.Mode.Set(t.Context(), &rpc.ModeSetRequest{Mode: rpc.SessionModePlan})
226+
_, err = session.RPC.Mode.Set(t.Context(), &rpc.ModeSetRequest{Mode: rpc.SessionModePlan})
227227
if err != nil {
228228
t.Fatalf("Failed to set mode to plan: %v", err)
229229
}
230-
if *planResult != rpc.SessionModePlan {
231-
t.Errorf("Expected mode 'plan', got %q", *planResult)
232-
}
233230

234231
// Verify mode persisted
235232
afterPlan, err := session.RPC.Mode.Get(t.Context())
@@ -241,13 +238,10 @@ func TestSessionRpc(t *testing.T) {
241238
}
242239

243240
// Switch back to interactive
244-
interactiveResult, err := session.RPC.Mode.Set(t.Context(), &rpc.ModeSetRequest{Mode: rpc.SessionModeInteractive})
241+
_, err = session.RPC.Mode.Set(t.Context(), &rpc.ModeSetRequest{Mode: rpc.SessionModeInteractive})
245242
if err != nil {
246243
t.Fatalf("Failed to set mode to interactive: %v", err)
247244
}
248-
if *interactiveResult != rpc.SessionModeInteractive {
249-
t.Errorf("Expected mode 'interactive', got %q", *interactiveResult)
250-
}
251245
})
252246

253247
t.Run("should read, update, and delete plan", func(t *testing.T) {

go/internal/e2e/session_fs_test.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -266,34 +266,37 @@ func (h *testSessionFsHandler) ReadFile(request *rpc.SessionFSReadFileRequest) (
266266
return &rpc.SessionFSReadFileResult{Content: string(content)}, nil
267267
}
268268

269-
func (h *testSessionFsHandler) WriteFile(request *rpc.SessionFSWriteFileRequest) error {
269+
func (h *testSessionFsHandler) WriteFile(request *rpc.SessionFSWriteFileRequest) (*rpc.SessionFSWriteFileResult, error) {
270270
path := providerPath(h.root, h.sessionID, request.Path)
271271
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
272-
return err
272+
return nil, err
273273
}
274274
mode := os.FileMode(0o666)
275275
if request.Mode != nil {
276276
mode = os.FileMode(uint32(*request.Mode))
277277
}
278-
return os.WriteFile(path, []byte(request.Content), mode)
278+
return &rpc.SessionFSWriteFileResult{}, os.WriteFile(path, []byte(request.Content), mode)
279279
}
280280

281-
func (h *testSessionFsHandler) AppendFile(request *rpc.SessionFSAppendFileRequest) error {
281+
func (h *testSessionFsHandler) AppendFile(request *rpc.SessionFSAppendFileRequest) (*rpc.SessionFSAppendFileResult, error) {
282282
path := providerPath(h.root, h.sessionID, request.Path)
283283
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
284-
return err
284+
return nil, err
285285
}
286286
mode := os.FileMode(0o666)
287287
if request.Mode != nil {
288288
mode = os.FileMode(uint32(*request.Mode))
289289
}
290290
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, mode)
291291
if err != nil {
292-
return err
292+
return nil, err
293293
}
294294
defer f.Close()
295295
_, err = f.WriteString(request.Content)
296-
return err
296+
if err != nil {
297+
return nil, err
298+
}
299+
return &rpc.SessionFSAppendFileResult{}, nil
297300
}
298301

299302
func (h *testSessionFsHandler) Exists(request *rpc.SessionFSExistsRequest) (*rpc.SessionFSExistsResult, error) {
@@ -312,26 +315,26 @@ func (h *testSessionFsHandler) Stat(request *rpc.SessionFSStatRequest) (*rpc.Ses
312315
if err != nil {
313316
return nil, err
314317
}
315-
ts := info.ModTime().UTC().Format(time.RFC3339)
318+
ts := info.ModTime().UTC()
316319
return &rpc.SessionFSStatResult{
317320
IsFile: !info.IsDir(),
318321
IsDirectory: info.IsDir(),
319-
Size: float64(info.Size()),
322+
Size: info.Size(),
320323
Mtime: ts,
321324
Birthtime: ts,
322325
}, nil
323326
}
324327

325-
func (h *testSessionFsHandler) Mkdir(request *rpc.SessionFSMkdirRequest) error {
328+
func (h *testSessionFsHandler) Mkdir(request *rpc.SessionFSMkdirRequest) (*rpc.SessionFSMkdirResult, error) {
326329
path := providerPath(h.root, h.sessionID, request.Path)
327330
mode := os.FileMode(0o777)
328331
if request.Mode != nil {
329332
mode = os.FileMode(uint32(*request.Mode))
330333
}
331334
if request.Recursive != nil && *request.Recursive {
332-
return os.MkdirAll(path, mode)
335+
return &rpc.SessionFSMkdirResult{}, os.MkdirAll(path, mode)
333336
}
334-
return os.Mkdir(path, mode)
337+
return &rpc.SessionFSMkdirResult{}, os.Mkdir(path, mode)
335338
}
336339

337340
func (h *testSessionFsHandler) Readdir(request *rpc.SessionFSReaddirRequest) (*rpc.SessionFSReaddirResult, error) {
@@ -365,28 +368,28 @@ func (h *testSessionFsHandler) ReaddirWithTypes(request *rpc.SessionFSReaddirWit
365368
return &rpc.SessionFSReaddirWithTypesResult{Entries: result}, nil
366369
}
367370

368-
func (h *testSessionFsHandler) Rm(request *rpc.SessionFSRmRequest) error {
371+
func (h *testSessionFsHandler) Rm(request *rpc.SessionFSRmRequest) (*rpc.SessionFSRmResult, error) {
369372
path := providerPath(h.root, h.sessionID, request.Path)
370373
if request.Recursive != nil && *request.Recursive {
371374
err := os.RemoveAll(path)
372375
if err != nil && request.Force != nil && *request.Force && os.IsNotExist(err) {
373-
return nil
376+
return &rpc.SessionFSRmResult{}, nil
374377
}
375-
return err
378+
return &rpc.SessionFSRmResult{}, err
376379
}
377380
err := os.Remove(path)
378381
if err != nil && request.Force != nil && *request.Force && os.IsNotExist(err) {
379-
return nil
382+
return &rpc.SessionFSRmResult{}, nil
380383
}
381-
return err
384+
return &rpc.SessionFSRmResult{}, err
382385
}
383386

384-
func (h *testSessionFsHandler) Rename(request *rpc.SessionFSRenameRequest) error {
387+
func (h *testSessionFsHandler) Rename(request *rpc.SessionFSRenameRequest) (*rpc.SessionFSRenameResult, error) {
385388
dest := providerPath(h.root, h.sessionID, request.Dest)
386389
if err := os.MkdirAll(filepath.Dir(dest), 0o755); err != nil {
387-
return err
390+
return nil, err
388391
}
389-
return os.Rename(
392+
return &rpc.SessionFSRenameResult{}, os.Rename(
390393
providerPath(h.root, h.sessionID, request.Src),
391394
dest,
392395
)

python/copilot/session.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from .generated.rpc import (
2525
ClientSessionApiHandlers,
2626
CommandsHandlePendingCommandRequest,
27-
UIHandlePendingElicitationRequest,
2827
Kind,
2928
LogRequest,
3029
ModelSwitchToRequest,
@@ -36,12 +35,13 @@
3635
SessionRpc,
3736
ToolCallResult,
3837
ToolsHandlePendingToolCallRequest,
39-
UIElicitationResponseAction,
4038
UIElicitationRequest,
4139
UIElicitationResponse,
40+
UIElicitationResponseAction,
4241
UIElicitationSchema,
4342
UIElicitationSchemaProperty,
4443
UIElicitationSchemaPropertyNumberType,
44+
UIHandlePendingElicitationRequest,
4545
)
4646
from .generated.rpc import ModelCapabilitiesOverride as _RpcModelCapabilitiesOverride
4747
from .generated.session_events import (

0 commit comments

Comments
 (0)