A GNOME Shell extension that provides a chatbot interface using various LLM providers, including Anthropic, OpenAI, Gemini, and OpenRouter. Features include multiple provider support, customizable models, chat history, customizable appearance, a keyboard shortcut, web search, location (by using the extension, you consent to sharing your location with OpenRouter for AI Tools) and copy-to-clipboard functionality.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
extension.js:451
St.Clipboard.get_default()
EGO-P-006 warning
unnecessary build and translation artifacts should not be shipped
Compiled GSettings schemas should not be shipped for 45+ packages.
Don't include unnecessary files
schemas/gschemas.compiled
schemas/gschemas.compiled
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:127
this._chatInput.clutter_text.connect("activate", () =>
this._handleUserInput(),
)
extension.js:142
this._newConversationButton.connect("clicked", () =>
this._handleNewConversation(),
)
extension.js:145
this._newConversationButton.connect("enter-event", () =>
this._handleNewConversationEnter(),
)
extension.js:148
this._newConversationButton.connect("leave-event", () =>
this._handleNewConversationLeave(),
)
extension.js:184
this.menu.connect("open-state-changed", (self, open) => {
if (open) {
this._focusInputBox();
}
})
EGO-L-008 warning
Soup.Session instances should be aborted during cleanup
Soup.Session instances should be aborted during cleanup.
lib/llmProviders.js:18
this._httpSession = new Soup.Session()
EGO-L-006 warning
preferences classes should not retain window-scoped objects on instance fields without close-request cleanup
Preferences code stores window-scoped objects on the exported prefs class without `close-request` cleanup.
prefs.js:618
this._settings = this.getSettings()
prefs.js:398
this.toolServerUrl = new Adw.EntryRow({
title: _("Tool Server URL:"),
})
prefs.js:410
this.weatherLat = new Adw.EntryRow({
title: _("Weather Latitude:"),
})
prefs.js:420
this.weatherLon = new Adw.EntryRow({
title: _("Weather Longitude:"),
})
prefs.js:313
this.colorDialog = new Gtk.ColorDialog({
with_alpha: false,
})
prefs.js:318
this.humanColorRow = new Adw.ActionRow({
title: _("Your Message Background Color:"),
subtitle: _("Select the background color for your messages."),
})
prefs.js:326
this.humanColor = new Gtk.ColorDialogButton({
valign: Gtk.Align.CENTER,
dialog: this.colorDialog,
})
prefs.js:336
this.humanTextColorRow = new Adw.ActionRow({
title: _("Your Message Text Color:"),
subtitle: _("Select the text color for your messages."),
})
prefs.js:344
this.humanTextColor = new Gtk.ColorDialogButton({
valign: Gtk.Align.CENTER,
dialog: this.colorDialog,
})
prefs.js:355
this.llmColorRow = new Adw.ActionRow({
title: _("Chatbot Message Background Color:"),
subtitle: _("Select the background color for the chatbot's messages."),
})
| Version | Status |
|---|---|
| 28 | Active |
| 27 | Rejected |
| 26 | Rejected |
| 25 | Active |
| 24 | Rejected |
| 23 | Rejected |
| 22 | Inactive |
| 21 | Rejected |
| 20 | Rejected |
| 19 | Inactive |
| 18 | Rejected |
| 17 | Rejected |
| 16 | Active |
| 15 | Inactive |
| 14 | Rejected |
| 13 | Inactive |
| 12 | Rejected |
| 11 | Active |
| 10 | Active |
| 9 | Rejected |
| 8 | Inactive |
| 7 | Inactive |
| 6 | Rejected |
| 5 | Inactive |
| 4 | Inactive |
| 3 | Inactive |
| 2 | Inactive |
| 1 | Rejected |