Review of "Penguin: AI Chatbot" version 28

Details Page Preview

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.

Extension Homepage
https://codeberg.org/martijara/Penguin-AI-Chatbot-for-GNOME

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 4 manual_review 1

Shexli found 5 issues that may need reviewer attention.

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • 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.

Disconnect all signals

  • 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.

Soup.Session.abort

  • 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.

Destroy all objects

  • 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."),
        })

All Versions

Previous Reviews on this Version

JustPerfection active