Skip to content

feat: add helium extension - #357

Merged
aurelleb merged 2 commits into
vicinaehq:mainfrom
AdityaZxxx:feat/helium-extension
Aug 18, 2026
Merged

feat: add helium extension#357
aurelleb merged 2 commits into
vicinaehq:mainfrom
AdityaZxxx:feat/helium-extension

Conversation

@AdityaZxxx

Copy link
Copy Markdown
Contributor

Adds Helium browser integration for Linux.

Commands

  • Search Bookmarks / Search History — search across all Helium profiles, read directly from the local profile files (no browser process needed).
  • Search Tabs — search, switch, close, and reload open tabs via Helium's remote debugging endpoint. Includes a one-click setup action for instances started without debugging: it writes --remote-debugging-port=9222 to Helium's launcher flags file and restarts the browser, preserving the session.
  • Search Web — search with Helium's configured default engine, with live suggestions.
  • New Tab / New Window / New Private Window — no-view commands that open in the running instance when possible.

Notes

  • Tabs are controlled over Chromium's HTTP debugging endpoints (/json/list, /json/activate, /json/close, /json/new), since Linux has no AppleScript or BrowserExtension API equivalent. Chromium only accepts --remote-debugging-port at startup, so the extension auto-detects the port (preference → DevToolsActivePort → default 9222) and launches Helium with an ephemeral port when nothing else enables debugging.
  • Network access is limited to the configured search engine's suggestion endpoint (with a Google OpenSearch fallback) and site favicons (CDP-reported for open tabs, Google's favicon service elsewhere, with built-in icon fallbacks).
  • Only two dependencies: @vicinae/api and sql.js (for the History and Web Data SQLite files).

Tested live on Helium 0.15.5.1 (Chromium 151) under Hyprland.

Adds Helium browser integration: open new tab/window/private window, and search tabs, bookmarks, history, and the web via Helium's default search engine.
@clankus-aurelius

clankus-aurelius commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Thanks for contributing an extension to Vicinae! 👋

Before publication, this pull request receives two reviews:

  1. An automated review for extension guidelines, safety, error handling, and likely correctness issues.
  2. A final review from a Vicinae maintainer.

Ready for human review. The automated reviewer approved the latest commit and a maintainer has been notified.

No blocking findings remain on the latest commit.

The automated reviewer examines only the current commit. New commits invalidate its previous decision and start another review.

@clankus-aurelius clankus-aurelius added the ai-reviewing Automated extension review is running label Aug 18, 2026

@clankus-aurelius clankus-aurelius left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The restart setup silently changes Helium’s persistent startup behavior. Three additional error-handling and disclosure issues should also be addressed.


Automated review found 1 publication-blocking issue.

This is an AI-generated first pass and may be mistaken. If a finding is unclear or incorrect, reply in the relevant thread and mention @aurelleb.

Comment thread extensions/helium/src/browser.ts Outdated
Comment on lines +160 to +162
writeFileSync(prefsPath, JSON.stringify(prefs));
} catch {
// unreadable or locked profile; skip

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Blocking — Debugging setup permanently changes browser startup behavior

Rule: CORRECTNESS-001

The restart flow sets restore_on_startup to 1 for every detected profile and never restores the previous values. Enabling debugging therefore permanently overwrites the user’s Helium startup preference.

Suggested resolution: Do not persistently modify the startup preference. Preserve and restore each prior value, or use a one-time session-restoration mechanism that leaves the configured startup behavior unchanged.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 936b9df. Rather than preserving and restoring prior values, I removed the Preferences rewrite entirely: the relaunch now passes --restore-last-session, which restores the session for that single launch only and leaves the user's configured startup behavior untouched. ensureSessionRestore() is deleted.

Comment on lines +53 to +55
} catch {
// profile without a readable History db; skip
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Warning — History database failures are presented as an empty history

Rule: UX-001

Every profile database error is discarded. If all History databases are unreadable or fail to initialize, the command displays “No history found” instead of reporting the operational failure.

Suggested resolution: Track failed database reads and show an actionable error when no profile was read successfully; reserve the empty state for successful queries with no rows.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 936b9df. Successful database reads are now counted; when no profile was read successfully the command shows an error state instead of the empty state.

Comment on lines +30 to +32
useEffect(() => {
void getSearchEngine().then(setEngine);
}, []);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Warning — Search-engine loading failures leave the command stuck

Rule: UX-001

getSearchEngine() has no rejection handler. A profile-directory read failure leaves engine null and the list loading indefinitely without feedback.

Suggested resolution: Catch initialization failures, stop loading, and display an actionable error or explicitly select the documented fallback engine.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 936b9df. getSearchEngine() failures are now caught, loading stops, and an error empty view is shown with the failure message.

Comment thread extensions/helium/README.md Outdated
## Notes

- Bookmarks, history, and the default search engine are read directly from Helium's local profile files.
- **Search Web** uses the search engine configured in Helium's settings and fetches suggestions from it (network access).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Warning — Suggestion fallback transmission is not disclosed

Rule: MANIFEST-001

The README says suggestions come from Helium’s configured engine, but fetchSuggestions also sends the query to Google whenever that engine has no suggestion URL, fails, or returns no suggestions.

Suggested resolution: Document when search queries are sent to Google’s suggestion endpoint.

Suggested change
- **Search Web** uses the search engine configured in Helium's settings and fetches suggestions from it (network access).
- **Search Web** uses the search engine configured in Helium's settings and fetches suggestions from it. If that endpoint is unavailable or returns no suggestions, the query is sent to Google's suggestion endpoint as a fallback (network access).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 936b9df — applied the suggested README wording.

@clankus-aurelius clankus-aurelius added ai-changes-requested Automated review found blocking issues and removed ai-reviewing Automated extension review is running labels Aug 18, 2026
- Restore session via one-time --restore-last-session launch switch instead of persistently rewriting the startup preference
- Report an error when no history database could be read
- Show an error state when the search engine cannot be determined
- Disclose the Google suggestion fallback in the README
@clankus-aurelius clankus-aurelius added ai-reviewing Automated extension review is running and removed ai-changes-requested Automated review found blocking issues labels Aug 18, 2026

@clankus-aurelius clankus-aurelius left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All previously reported issues are resolved by the incremental changes. No new actionable issue was introduced.


Automated extension review passed. A maintainer review is still required.

This is an AI-generated first pass and may be mistaken. If a finding is unclear or incorrect, reply in the relevant thread and mention @aurelleb.

@clankus-aurelius clankus-aurelius added human-reviewable Automated review passed; ready for maintainer review and removed ai-reviewing Automated extension review is running labels Aug 18, 2026
@clankus-aurelius

Copy link
Copy Markdown
Collaborator

@aurelleb automated review passed for 936b9df; this extension is ready for your review.

@aurelleb

Copy link
Copy Markdown
Contributor

thanks!

@aurelleb
aurelleb merged commit 9fca13c into vicinaehq:main Aug 18, 2026
5 checks passed
@AdityaZxxx

Copy link
Copy Markdown
Contributor Author

Glad it was useful!

@AdityaZxxx
AdityaZxxx deleted the feat/helium-extension branch August 18, 2026 11:18
nino-mau pushed a commit to nino-mau/extensions that referenced this pull request Aug 18, 2026
* feat: add helium extension

Adds Helium browser integration: open new tab/window/private window, and
search tabs, bookmarks, history, and the web via Helium's default search
engine.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-reviewable Automated review passed; ready for maintainer review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants