Files

11 KiB

Final Comprehensive Gap Analysis: sovereign_browser Rust Port

This document catalogs every remaining gap between the original C implementation (/home/user/lt/sovereign_browser) and the Rust port (/home/user/lt/sovereign_browser_rust). The goal is 100% feature parity.


1. Hamburger Menu Gaps

The C hamburger menu (tab_manager.c:2562-2692) has significantly more items than the Rust version (src/tab_manager.rs:997).

Missing Menu Items

Item C Action Rust Status
Recents (History submenu) Dropdown of last 10 pages + "Clear Recents" Missing
Bookmarks submenu Tree of bookmarks + "Manage Bookmarks…" Missing
Tor-routed transport Check menu item (toggle Tor mode) Missing
FIPS mesh Check menu item (toggle FIPS mode) Missing
Security strip Check menu item (toggle SOP/CORS/certs) Missing
Nostr signing status Clickable item showing signer status Missing
Lock Session Sign out without closing browser Missing
Download Website Opens site downloader Missing
About Opens about dialog Missing
Avatar button Circular profile picture button next to hamburger Missing

Required files: src/tab_manager.rs


2. Keyboard Shortcuts Gaps

The C version defines 20+ shortcuts (shortcuts.c:24-124). The Rust version (src/shortcuts.rs:21) has 12.

Missing Shortcuts

Action Shortcut Rust Status
new_window Ctrl+N Not in shortcut registry
open_file Ctrl+O Missing
force_reload Shift+F5 Missing
go_back Alt+Left Missing
go_forward Alt+Right Missing
find Ctrl+F Missing
open_settings Ctrl+, Missing
open_processes Ctrl+Shift+Esc Missing
new_identity Ctrl+Shift+U Missing
toggle_fullscreen F11 Missing
toggle_sidebar Ctrl+Shift+A Missing
toggle_toolbars Ctrl+Shift+M Missing
bookmark_page Ctrl+D Missing
show_history Ctrl+H Missing
show_bookmarks Ctrl+B Missing
show_downloads Ctrl+J Missing
quit Ctrl+Q Missing
next_tab_pagedown Ctrl+PageDown Missing
prev_tab_pageup Ctrl+PageUp Missing

Key handler gaps in src/main.rs

Missing: Ctrl+O (open_file), Ctrl+Comma (settings), Ctrl+Shift+Esc (processes), Ctrl+Shift+U (identity), Alt+Left/Right (back/forward), F5 (reload), Shift+F5 (force), Ctrl+F (find), Ctrl+D (bookmark), Ctrl+H (history), Ctrl+B (bookmarks), Ctrl+Q (quit), Ctrl+PageDown/Up (tabs), Ctrl+Shift+A (sidebar), Ctrl+Shift+M (toolbars)

Missing handle_key_press bypass for sovereign:// pages

The C version bypasses shortcut interception when sovereign:// pages are active so the page's JS can capture key combos.


3. Settings Page (sovereign://settings) Gaps

settings/config JSON gaps (src/nostr_bridge.rs:465)

Field Type C version (nostr_bridge.c:2940) Rust Status
agent_server_enabled bool Whether agent server is on Missing
agent_login_timeout_ms number Login timeout Missing
dev_extras bool From WebKit settings Missing
file_access bool From WebKit settings Missing
universal_access bool From WebKit settings Missing
search_engines array List of {id, name} Missing
shortcuts array All shortcuts with id/label/accel Missing
tab_bar_position string "top"/"bottom"/"left"/"right" Returns number

settings/set handler gaps (src/nostr_bridge.rs:465)

Feature/Key C handler (nostr_bridge.c:1037) Rust Status
agent_server_enabled Toggle agent server on/off Missing
dev_extras Toggle WebKit developer extras Missing
file_access Toggle file access from file:// Missing
universal_access Toggle universal access from file:// Missing
shortcut.reset_all Reset all shortcuts to defaults Missing
shortcut.reset Reset a single shortcut Missing
shortcut.<action> Set a shortcut to a custom binding Missing
agent_allowed_origins Save allowed origins Missing
agent_login_timeout_ms Save login timeout Missing

Settings page HTML

The www/settings.html + settings.js expects the settings/config JSON to include search_engines, shortcuts, agent_server_enabled, dev_extras, etc. Without these fields, the page renders incompletely.


4. Agent System Gaps

Feature C Status Rust Status
Agent chat sidebar Lazily created webview in GtkPaned, loads sovereign://agents/chat Implemented (src/tab_manager.rs:1076)
Agent tools browser_click, browser_type, browser_screenshot Implemented (src/agent_tools.rs:323)
Agent loop Async LLM loop with tool calling Implemented (src/agent_loop.rs)
Agent LLM providers OpenAI/Anthropic/Ollama support Implemented (src/agent_llm.rs)
Agent chat store Message history, conversation management Implemented (src/agent_chat_store.rs)
Agent conversations Save/load/rename/delete conversations Implemented (src/agent_conversations.rs)
Agent skills Kind 31123 skill management Implemented (src/agent_skills.rs)
Agent snapshot MCP snapshot of tool state Implemented (src/agent_snapshot.rs)
Agent server HTTP server for agent tools Implemented (src/agent_server.rs)
Agent login Extension login state Implemented (src/agent_login.rs)
Agent MCP Model Context Protocol server Implemented (src/agent_mcp.rs)
Agent FS tools Filesystem tool definitions Implemented (src/agent_fs_tools.rs)

5. sovereign:// Internal Page Gaps

Page C Status Rust Status
sovereign://settings Full settings with all toggles, relays, search, shortcuts HTML served from www/settings.html, JSON endpoints need config fields
sovereign://bookmarks Tree view with add/delete/create/move/rename Implemented (src/nostr_bridge.rs:95)
sovereign://profile Kind 0/3/10002 data from SQLite Implemented (src/nostr_bridge.rs:386)
sovereign://processes Layer 1 (OS) + Layer 2 (tabs) Implemented (src/nostr_bridge.rs:99)
sovereign://fips Status, peers, network, tree, directory Served from www/fips.html + JS, backend stubs
sovereign://agents Provider config, models, skills Served from www/agents/config.html + JS
sovereign://agents/chat Full chat client with markdown, conversations Served from www/agents/chat.html + JS
sovereign://qr QR code generation Implemented (src/nostr_bridge.rs:419)
sovereign://security Redirects to settings Implemented
sovereign://nostr/* NIP-07 bridge API Implemented (src/nostr_bridge.rs:89)

6. Network Services Gaps

Service C Status Rust Status
Tor control TCP/Unix socket, authenticate, NEWNYM Implemented (src/tor_control.rs)
FIPS control Unix socket JSON-line protocol Implemented (src/fips_control.rs)
Net services Start/stop Tor & FIPS managed services Stubs (src/net_services.rs)

7. Performance Probe Gaps

Feature C Status Rust Status
Perf-probe.js injection Preamble + probe body injected into every non-internal page Implemented (src/nostr_inject.rs:135)
probe-report endpoint Receives periodic probe reports Implemented (src/nostr_bridge.rs:99)
tab_probe endpoint Drill-down for a single tab Implemented
tab_action endpoint Reload/suspend/close tabs Implemented

8. Minor Gaps

Item C Status Rust Status
Site downloader Headless webview rendering & asset bundling Stub (src/site_downloader.rs)
Favicon display 16x16 pixbufs in tab labels Missing (cairo API limitation)
Popup handler target="_blank" → new tab policy WebKit create signal not hooked
URL history tracking Records visited URLs in SQLite Not wired to load-changed signal
Avatar button Circular profile picture in toolbar Missing
About dialog GTK dialog with version info Missing

Summary: What Needs to Be Done

High Priority (Blocks user experience)

  1. Hamburger menu parity — Add Recents (history), Bookmarks tree, Tor/FIPS toggles, Security strip toggle, Nostr signing status, Lock Session, Download Website, About, Avatar button.
  2. Shortcut parity — Add all missing 17 shortcuts to registry and key handler.
  3. Settings/config JSON — Add missing fields: agent_server_enabled, agent_login_timeout_ms, dev_extras, file_access, universal_access, search_engines, shortcuts, tab_bar_position (string).
  4. Settings/set handler — Add missing features: agent_server_enabled, dev_extras, file_access, universal_access, shortcut reset, shortcut set.

Medium Priority

  1. Popup handler — Hook WebKit create signal for target="_blank".
  2. URL history — Wire load-changed signal to db_add_history.
  3. Site downloader — Implement headless webview rendering.

Low Priority

  1. Favicon display — Research cairo surface conversion.
  2. About dialog — Simple GTK dialog.
  3. Avatar button — Circular profile picture.