Skip to content

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Feb 4, 2026

Bumps github-copilot-sdk from 0.1.20 to 0.1.21.

Release notes

Sourced from github-copilot-sdk's releases.

v0.1.21

What's Changed

New Contributors

Full Changelog: github/copilot-sdk@v0.1.20...v0.1.21

Commits
  • 25304dc Bump Copilot to 0.0.402 (#348)
  • 0d154b6 Add the ability to connect to a running instance of the Copilot CLI (#346)
  • 73c1431 Update all dependencies (#332)
  • 685df87 [go] Accept and propagate context (#340)
  • 56431ab Fail CI if snapshots aren't present (#304)
  • 6e16448 [go] make e2e and jsonrpc internal packages (#339)
  • ba3571b Clarify FAQ: BYOK works without GitHub Copilot subscription (#336)
  • 258ce73 Replace Literal model type with string in Python SessionConfig (#325)
  • 92c30b7 Add a new line after the model generates final text response after tool call ...
  • e6e4dec fix ask-user test snapshots (#319)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [github-copilot-sdk](https://github.com/github/copilot-sdk) from 0.1.20 to 0.1.21.
- [Release notes](https://github.com/github/copilot-sdk/releases)
- [Commits](github/copilot-sdk@v0.1.20...v0.1.21)

---
updated-dependencies:
- dependency-name: github-copilot-sdk
  dependency-version: 0.1.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Feb 4, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2026

❌ Ruff Lint Check Failed

The code quality checks did not pass. Please review and fix the issues below:

📝 Format Issues

The following code needs formatting. Here are the differences:

--- src\core\utils\widget_builder.py
+++ src\core\utils\widget_builder.py
@@ -72,7 +72,7 @@
                     # Set widget_name for keybinding identification
                     widget.widget_name = widget_name
                     return widget
-            except (AttributeError, ValueError, ModuleNotFoundError):
+            except AttributeError, ValueError, ModuleNotFoundError:
                 logging.exception(f"Failed to import widget with type {widget_config['type']}")
                 self._invalid_widget_types[widget_name] = widget_config["type"]
             except KeyError:

--- src\core\utils\widgets\ai_chat\stream_worker_manager.py
+++ src\core\utils\widgets\ai_chat\stream_worker_manager.py
@@ -250,7 +250,7 @@
                     self._owner._thread = None
                 else:
                     QTimer.singleShot(SCROLL_DELAY_MS, self.clear_thread_reference)
-            except (RuntimeError, AttributeError):
+            except RuntimeError, AttributeError:
                 self._owner._thread = None
 
     def reset_copilot_session(self, provider: str | None, model: str | None):

--- src\core\utils\widgets\github\api.py
+++ src\core\utils\widgets\github\api.py
@@ -471,5 +471,5 @@
             identifier = parts[-1]
             number = int(identifier.split("?")[0])
             return owner, repo, number
-        except (IndexError, ValueError):
+        except IndexError, ValueError:
             return None

--- src\core\utils\widgets\komorebi\client.py
+++ src\core\utils\widgets\komorebi\client.py
@@ -40,7 +40,7 @@
             return json.loads(output)
         except subprocess.TimeoutExpired:
             logging.error(f"Komorebi state query timed out in {self._timeout_secs} seconds")
-        except (json.JSONDecodeError, subprocess.CalledProcessError, FileNotFoundError):
+        except json.JSONDecodeError, subprocess.CalledProcessError, FileNotFoundError:
             return None
 
     def get_screens(self, state: dict) -> list:
@@ -66,7 +66,7 @@
             focused_workspace = self.get_workspace_by_index(screen, focused_workspace_index)
             focused_workspace["index"] = focused_workspace_index
             return focused_workspace
-        except (KeyError, TypeError):
+        except KeyError, TypeError:
             return None
 
     def get_num_windows(self, workspace: dict) -> bool:
@@ -110,12 +110,12 @@
         if wait:
             try:
                 subprocess.run(args, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, shell=True)
-            except (subprocess.SubprocessError, FileNotFoundError):
+            except subprocess.SubprocessError, FileNotFoundError:
                 logging.exception("Failed to activate komorebi workspace")
         else:
             try:
                 subprocess.Popen(args, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, shell=True)
-            except (subprocess.SubprocessError, FileNotFoundError):
+            except subprocess.SubprocessError, FileNotFoundError:
                 logging.exception("Failed to activate komorebi workspace (spawn)")
 
     def next_workspace(self) -> None:
@@ -126,7 +126,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to cycle komorebi workspace")
 
     def prev_workspace(self) -> None:
@@ -137,7 +137,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to cycle komorebi workspace")
 
     def toggle_focus_mouse(self) -> None:
@@ -148,7 +148,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to toggle focus-follows-mouse")
 
     def change_layout(self, m_idx: int, ws_idx: int, layout: str) -> None:
@@ -159,7 +159,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception(f"Failed to change layout of currently active workspace to {layout}")
 
     def flip_layout(self, direction: str) -> None:
@@ -170,7 +170,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             pass
 
     def flip_layout_horizontal(self) -> None:
@@ -191,7 +191,7 @@
                 subprocess.run(command, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, check=True)
             else:
                 subprocess.Popen(command, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception(f"Failed to toggle {toggle_type} for currently active workspace")
 
     def wait_until_subscribed_to_pipe(self, pipe_name: str):
@@ -213,7 +213,7 @@
         try:
             monocle_container = workspace["monocle_container"]
             return monocle_container if isinstance(monocle_container, dict) else None
-        except (KeyError, TypeError):
+        except KeyError, TypeError:
             return None
 
     def get_container_by_index(self, workspace: dict, container_index: int) -> Optional[dict]:
@@ -232,7 +232,7 @@
             focused_container = self.get_container_by_index(workspace, focused_container_index)
             focused_container["index"] = focused_container_index
             return focused_container
-        except (KeyError, TypeError):
+        except KeyError, TypeError:
             return None
 
     def get_windows(self, container: Optional[dict]) -> list:
@@ -258,7 +258,7 @@
             focused_window = self.get_window_by_index(container, focused_window_index)
             focused_window["index"] = focused_window_index
             return focused_window
-        except (KeyError, TypeError):
+        except KeyError, TypeError:
             return None
 
     def get_floating_windows(self, workspace: dict) -> list:
@@ -274,7 +274,7 @@
         try:
             focused_window_index = workspace["floating_windows"]["focused"]
             return self.get_floating_windows(workspace)[focused_window_index]
-        except (KeyError, TypeError, IndexError):
+        except KeyError, TypeError, IndexError:
             return None
 
     def focus_stack_window(self, w_idx: int) -> None:
@@ -285,7 +285,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to focus stack window")
 
     def next_stack_window(self) -> None:
@@ -296,7 +296,7 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to cycle komorebi stack")
 
     def prev_stack_window(self) -> None:
@@ -307,5 +307,5 @@
                 stderr=subprocess.DEVNULL,
                 shell=True,
             )
-        except (subprocess.SubprocessError, FileNotFoundError):
+        except subprocess.SubprocessError, FileNotFoundError:
             logging.exception("Failed to cycle komorebi stack")

--- src\core\utils\widgets\komorebi\event_listener.py
+++ src\core\utils\widgets\komorebi\event_listener.py
@@ -75,7 +75,7 @@
 
                             if event and state:
                                 self._emit_event(event, state)
-                        except (KeyError, ValueError):
+                        except KeyError, ValueError:
                             logging.exception(f"Failed to parse komorebi state. Received data: {data}")
                     except pywintypes.error as e:
                         if e.winerror == 109:  # ERROR_BROKEN_PIPE
@@ -83,7 +83,7 @@
                             break
                         else:
                             logging.exception(f"Unexpected error occurred: {e}")
-            except (BaseException, Exception):
+            except BaseException, Exception:
                 logging.exception(f"Komorebi has disconnected from the named pipe {self.pipe_name}")
             finally:
                 if self.pipe:

--- src\core\utils\widgets\launchpad\icon_extractor.py
+++ src\core\utils\widgets\launchpad\icon_extractor.py
@@ -103,7 +103,7 @@
             def filter_logos(logofiles, qualifiers, values):
                 for qualifier in qualifiers:
                     for value in values:
-                        filtered_files = list(filter(lambda x: (qualifier + "-" + value in x), logofiles))
+                        filtered_files = list(filter(lambda x: qualifier + "-" + value in x, logofiles))
                         if filtered_files:
                             return filtered_files
                 return logofiles

--- src\core\utils\widgets\taskbar\pin_context.py
+++ src\core\utils\widgets\taskbar\pin_context.py
@@ -102,7 +102,7 @@
                                 # This is a CLSID path (e.g., Recycle Bin), use it directly
                                 explorer_path = folder_path
                                 break
-                    except (AttributeError, Exception):
+                    except AttributeError, Exception:
                         # Window doesn't have Document/Folder/Self, or COM error - skip it
                         continue
             except Exception as exc:

--- src\core\utils\widgets\taskbar\window_manager.py
+++ src\core\utils\widgets\taskbar\window_manager.py
@@ -123,7 +123,7 @@
                 manager._handle_shell_hook_message(int(msg.wParam), int(msg.lParam))
                 return True, 0
 
-        except (KeyboardInterrupt, SystemExit):
+        except KeyboardInterrupt, SystemExit:
             raise
         except Exception:
             pass
@@ -280,7 +280,7 @@
                         else:
                             if hwnd_int in self._windows:
                                 self._schedule_window_update(hwnd_int)
-                except (KeyboardInterrupt, SystemExit):
+                except KeyboardInterrupt, SystemExit:
                     raise
                 except Exception:
                     return

--- src\core\widgets\komorebi\stack.py
+++ src\core\widgets\komorebi\stack.py
@@ -357,7 +357,7 @@
                         and not new_window_button.icon
                     ):
                         new_window_button.update_icon(ignore_cache=True)
-                except (IndexError, TypeError):
+                except IndexError, TypeError:
                     pass
 
             elif (

--- src\core\widgets\komorebi\workspaces.py
+++ src\core\widgets\komorebi\workspaces.py
@@ -394,7 +394,7 @@
                         elif event["type"] in [KomorebiEvent.TitleUpdate.value]:
                             hwnd = event["content"][1]["hwnd"]
                             self._workspace_buttons[i].update_icon_by_hwnd(hwnd)
-                except (IndexError, TypeError):
+                except IndexError, TypeError:
                     pass
 
             if event["type"] == KomorebiEvent.MoveWorkspaceToMonitorNumber.value:
@@ -415,7 +415,7 @@
                     self._update_button(prev_workspace_button)
                     new_workspace_button = self._workspace_buttons[self._curr_workspace_index]
                     self._update_button(new_workspace_button)
-                except (IndexError, TypeError):
+                except IndexError, TypeError:
                     self._add_or_update_buttons()
             elif event["type"] in self._update_buttons_event_watchlist:
                 self._add_or_update_buttons()

--- src\core\widgets\yasb\custom.py
+++ src\core\widgets\yasb\custom.py
@@ -215,7 +215,7 @@
         if self._tooltip_label:
             try:
                 tooltip_text = self._tooltip_label.format(data=self._exec_data)
-            except (KeyError, AttributeError, TypeError, IndexError):
+            except KeyError, AttributeError, TypeError, IndexError:
                 # If formatting fails, fall back to showing raw data
                 tooltip_text = str(self._exec_data)
         else:

--- src\core\widgets\yasb\home.py
+++ src\core\widgets\yasb\home.py
@@ -112,8 +112,8 @@
             if not path:
                 return lambda: logging.error("Home menu item missing 'path'.")
             path = os.path.expanduser(path)
-            return (
-                lambda: os.startfile(path)
+            return lambda: (
+                os.startfile(path)
                 if os.path.exists(path)
                 else logging.error(f"The system cannot find the file specified: '{path}'")
             )

--- src\core\widgets\yasb\libre_monitor.py
+++ src\core\widgets\yasb\libre_monitor.py
@@ -233,7 +233,7 @@
         try:
             if getattr(self, "_menu", None) is not None and isinstance(self._menu, QWidget) and self._menu.isVisible():
                 return True
-        except (RuntimeError, AttributeError):
+        except RuntimeError, AttributeError:
             return False
 
     def _get_histogram_bar(self, value: float, value_min: float, value_max: float):

--- src\core\widgets\yasb\notes.py
+++ src\core\widgets\yasb\notes.py
@@ -320,7 +320,7 @@
                 date_label = QLabel(date_str)
                 date_label.setProperty("class", "date")
                 text_layout.addWidget(date_label)
-            except (ValueError, TypeError):
+            except ValueError, TypeError:
                 pass
 
         container_layout.addWidget(text_container)

--- src\core\widgets\yasb\obs.py
+++ src\core\widgets\yasb\obs.py
@@ -66,8 +66,8 @@
         self._record_btn = QLabel(self._icons["stopped"])
         self._record_btn.setProperty("class", "icon record stopped")
         self._record_btn.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
-        self._record_btn.mousePressEvent = (
-            lambda e: self.toggle_record() if e.button() == Qt.MouseButton.LeftButton else None
+        self._record_btn.mousePressEvent = lambda e: (
+            self.toggle_record() if e.button() == Qt.MouseButton.LeftButton else None
         )
         if self._tooltip:
             set_tooltip(self._record_btn, "Toggle Recording", position="top")
@@ -80,8 +80,8 @@
         self._virtual_cam_btn = QLabel(self._icons["virtual_cam_off"])
         self._virtual_cam_btn.setProperty("class", "icon virtual-cam off")
         self._virtual_cam_btn.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
-        self._virtual_cam_btn.mousePressEvent = (
-            lambda e: self.toggle_virtual_cam() if e.button() == Qt.MouseButton.LeftButton else None
+        self._virtual_cam_btn.mousePressEvent = lambda e: (
+            self.toggle_virtual_cam() if e.button() == Qt.MouseButton.LeftButton else None
         )
         if self._tooltip:
             set_tooltip(self._virtual_cam_btn, "Toggle Virtual Camera", position="top")
@@ -93,8 +93,8 @@
         self._studio_mode_btn = QLabel(self._icons["studio_mode_off"])
         self._studio_mode_btn.setProperty("class", "icon studio-mode off")
         self._studio_mode_btn.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
-        self._studio_mode_btn.mousePressEvent = (
-            lambda e: self.toggle_studio_mode() if e.button() == Qt.MouseButton.LeftButton else None
+        self._studio_mode_btn.mousePressEvent = lambda e: (
+            self.toggle_studio_mode() if e.button() == Qt.MouseButton.LeftButton else None
         )
         if self._tooltip:
             set_tooltip(self._studio_mode_btn, "Toggle Studio Mode", position="top")

--- src\core\widgets\yasb\server_monitor.py
+++ src\core\widgets\yasb\server_monitor.py
@@ -113,7 +113,7 @@
             if http_status is not None:
                 response_time = int((datetime.now() - start_time).total_seconds() * 1000)
 
-        except (urllib.error.URLError, socket.timeout, ssl.SSLError, ConnectionError, PermissionError, OSError):
+        except urllib.error.URLError, socket.timeout, ssl.SSLError, ConnectionError, PermissionError, OSError:
             pass
 
         # Check SSL if needed and determine status

--- src\core\widgets\yasb\traffic.py
+++ src\core\widgets\yasb\traffic.py
@@ -319,7 +319,7 @@
                 self.menu_labels["internet-info"].setText(status_text)
                 self.menu_labels["internet-info"].setProperty("class", f"internet-info {net_status}")
                 refresh_widget_style(self.menu_labels["internet-info"])
-            except (RuntimeError, AttributeError):
+            except RuntimeError, AttributeError:
                 pass
 
     def _toggle_label(self):
@@ -624,6 +624,6 @@
                 and self._menu_widget.isVisible()
             ):
                 return True
-        except (RuntimeError, AttributeError):
+        except RuntimeError, AttributeError:
             return False
         return False

--- src\core\widgets\yasb\volume.py
+++ src\core\widgets\yasb\volume.py
@@ -510,19 +510,19 @@
 
                 # Connect to change app volume
                 app_slider.valueChanged.connect(
-                    lambda value,
-                    vol_interface=session_info["volume_interface"],
-                    slider=app_slider: self._set_app_volume(vol_interface, value, slider)
+                    lambda value, vol_interface=session_info["volume_interface"], slider=app_slider: (
+                        self._set_app_volume(vol_interface, value, slider)
+                    )
                 )
                 # Connect slider release to hide tooltip
                 app_slider.sliderReleased.connect(self._on_slider_released)
 
                 if self._audio_menu["show_app_icons"]:
                     # Make icon frame clickable to toggle mute
-                    icon_frame.mousePressEvent = lambda event, vol_interface=session_info[
-                        "volume_interface"
-                    ], icon=icon_label, slider=app_slider, pid=session_info["pid"]: self._toggle_app_mute(
-                        vol_interface, icon, slider, pid
+                    icon_frame.mousePressEvent = (
+                        lambda event, vol_interface=session_info["volume_interface"], icon=icon_label, slider=app_slider, pid=session_info["pid"]: (
+                            self._toggle_app_mute(vol_interface, icon, slider, pid)
+                        )
                     )
 
                 slider_layout.addWidget(app_slider)

18 files would be reformatted, 207 files already formatted

To fix: Run ruff format . in your local repository.


Note: The build will be skipped until these issues are resolved.
Please commit the fixes and push to this PR branch.

@dependabot @github
Copy link
Contributor Author

dependabot bot commented on behalf of github Feb 6, 2026

Superseded by #685.

@dependabot dependabot bot closed this Feb 6, 2026
@dependabot dependabot bot deleted the dependabot/pip/github-copilot-sdk-0.1.21 branch February 6, 2026 07:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant