{"record":{"id":"5b70b482c48d6ae9","repo":"github/copilot-sdk","slug":"failed-to-get-events-w","errorCode":null,"errorMessage":"failed to get events: %w","messagePattern":"failed to get events: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/session.go","lineNumber":1803,"sourceCode":"// Returns an error if the session has been disconnected or the connection fails.\n//\n// Example:\n//\n//\tevents, err := session.GetEvents(context.Background())\n//\tif err != nil {\n//\t    log.Printf(\"Failed to get events: %v\", err)\n//\t    return\n//\t}\n//\tfor _, event := range events {\n//\t    if d, ok := event.Data.(*copilot.AssistantMessageData); ok {\n//\t        fmt.Println(\"Assistant:\", d.Content)\n//\t    }\n//\t}\nfunc (s *Session) GetEvents(ctx context.Context) ([]SessionEvent, error) {\n\n\tresult, err := s.client.Request(ctx, \"session.getMessages\", sessionGetMessagesRequest{SessionID: s.SessionID})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to get events: %w\", err)\n\t}\n\n\tvar response sessionGetMessagesResponse\n\tif err := json.Unmarshal(result, &response); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to unmarshal get events response: %w\", err)\n\t}\n\treturn response.Events, nil\n}\n\n// Disconnect closes this session and releases all in-memory resources (event\n// handlers, tool handlers, permission handlers).\n//\n// The caller should ensure the session is idle (e.g., [Session.SendAndWait] has\n// returned) before disconnecting. If the session is not idle, in-flight event\n// handlers or tool handlers may observe failures.\n//\n// Session state on disk (conversation history, planning state, artifacts) is\n// preserved, so the conversation can be resumed later by calling","sourceCodeStart":1785,"sourceCodeEnd":1821,"githubUrl":"https://github.com/github/copilot-sdk/blob/cd8cf15dc3f9e762615790aaed0a771a0f392755/go/session.go#L1785-L1821","documentation":"Session.GetEvents sends the `session.getMessages` RPC to the runtime to fetch the session's event/message list. This error wraps any transport- or server-side failure returned by that request, so the underlying cause (connection closed, session unknown, timeout) is in the wrapped `%w` chain.","triggerScenarios":"Calling Session.GetEvents(ctx) when the RPC request `session.getMessages` fails: the client connection is down, the session ID is no longer valid server-side, or the runtime returns an error response.","commonSituations":"Polling events after the runtime process exited; using a Session whose server-side state was discarded; network/pipe breakage between client and a child-process runtime.","solutions":["Inspect the wrapped error (errors.Unwrap / %v) to find the root cause","Verify the runtime process is still alive and the session ID is valid","Reconnect the client and recreate/reattach the session, then retry GetEvents","Add retry with backoff around GetEvents for transient transport errors"],"exampleFix":"// before\nevents, err := session.GetEvents(ctx)\n// after\nevents, err := session.GetEvents(ctx)\nif err != nil {\n    var netErr net.Error\n    if errors.As(err, &netErr) {\n        events, err = session.GetEvents(ctx) // retry transient failure\n    }\n}","handlingStrategy":"retry","validationCode":"if session == nil || session.SessionID == \"\" {\n    return errors.New(\"session not initialized\")\n}","typeGuard":null,"tryCatchPattern":"events, err := session.GetEvents(ctx)\nif err != nil {\n    var retryable bool\n    for i := 0; i < 3 && !retryable; i++ {\n        time.Sleep(backoff(i))\n        events, err = session.GetEvents(ctx)\n        retryable = err == nil\n    }\n}","preventionTips":["Health-check the connection before polling","Stop polling once Disconnect was called","Always inspect the wrapped cause, not just the top-level message"],"tags":["go","rpc","network","session"],"backgroundTag":"api-request-failed","analyzedSha":"cd8cf15dc3f9e762615790aaed0a771a0f392755","analyzedAt":"2026-09-09T18:32:31.973Z","contentChangedAt":"2026-09-09T18:32:31.973Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}