Skip to content

2026.06.15

Choose a tag to compare

@raymerjacque raymerjacque released this 14 Jun 15:34

Electra AI Center — Release Notes 2026.06.15

This massive development sprint adds over 2,300 lines of code across three distinct structural merges, bringing the application's source base to 10,075 lines. This release implements full IDE features, including a Project Search-and-Replace system, a Cairo-rendered Minimap, an AST-driven Sticky Scroll header, Multiple VTE terminal sessions, a Python REPL interpreter tab, and an interactive Sidebar Plugin Manager [1].

🛠️ Project-Wide Search & Replace Engine

The search subsystem has been expanded with a secondary regex-capable replacement engine [1].

Regex Substitutions (re.subn): Users can now execute global replacements across their entire workspace, with full support for regex capture groups (\1, \2, etc.) [1].

Active Buffer Synchronization: On replacement, the engine detects if target files are currently open in the GTK editor tabs, programmatically reloads the text buffers, and refreshes the search results [1].

Execution Feedback: Provides a non-blocking toast alert detailing the count of occurrences swapped and files modified (e.g., "Replaced 47 occurrence(s) in 12 file(s)") [1].

🗺️ Cairo-Rendered Code Minimap (Ctrl+Shift+)

A high-performance visual navigation panel has been added to the right margin of GtkSourceView editor tabs [1].

Proportional Line Drawing: Uses a native Cairo drawing canvas to construct line-by-line proportional bars of code (with wider bars representing longer lines) matching your syntax highlighter theme colors [1].

Viewport Tracking: Highlights a semi-translucent overlay indicating the viewport boundary relative to the active line index [1].

Interactive Navigation: Supports mouse press events on the canvas, instantly translating the coordinates to line numbers and scrolling the GtkSourceView view port to the target destination [1].

📌 AST-Driven Sticky Scroll Header

A dynamic, contextual header bar has been integrated directly above the editor tabs to maintain structural awareness during file traversal [1].

Abstract Syntax Tree (AST) Precision: For Python files, the module uses standard ast.parse evaluations to calculate the surrounding hierarchical structure of the cursor position [1]. Falls back to regex matches for JS, TS, Go, Rust, C, and C++ [1].

Dynamic Scoping: Displayed within a dedicated layout bar, showing the exact class, function, or method structure of the active block (e.g., class DocumentManager › def parse_block) [1].

Debounced Thread Processing: Updates on every cursor position change, throttled through GLib.idle_add to prevent GUI input stuttering [1].

📎 Workspace Context & File Management

  1. @-Mention Interactive Context Chips

Visual File Pills: When typing @filename inside the chat pane, the autocompleted file is rendered as a stylized chip/pill directly above the chat text field [1].

Removable Tags: Chips feature a termination action (✕), which strips both the pill and its bound [File: ...] context block from the input buffer [1].

Auto-Injection Context: In Coder Mode, the file contents of the active editor tab are automatically appended to the prompt context without requiring manual pinning, unless explicitly bypassed by other @-mention blocks [1].

  1. Workspace Session Switcher & Recent Files

Popover Folder Tracker: A new workspace switcher button (⌂) lists the last 12 project directories with active tracking checkmarks, stored at ~/.config/electra/recent_workspaces.json [1].

Quick Open History: The Ctrl+P Quick File Open tool now features a dedicated RECENT section displaying the last 8 open buffers, persisting states across system restarts [1].

  1. Drag & Drop Text Insertion

Connects the GTK editor window to native window manager drag operations [1].

Decodes incoming drag objects (MIME type text/uri-list), automatically opening files in dedicated editor tabs, and handling binary formats (such as image assets) through local preview paths [1].

🐚 Multi-VTE Terminal Tabs & Python REPL

  1. Concurrent Terminal Tabs

Bottom terminal panels can now spawn multiple isolated console sessions using the + button [1].

Spawns new VTE terminal views inside the active workspace directory, each designated with tab navigation and close operations [1].

  1. Stateful Python REPL Tab

Integrates a dedicated Python interpreter shell in the bottom panel for rapid prototyping [1].

Implements unified command line tracking, accepting expressions (evaluated via eval()) and full statements (executed via exec()) [1].

Captures and displays standard streams (stdout/stderr), preserving local variables and memory environments between inputs [1].

Binds keyboard arrow events to navigate the shell command history [1].

⚡ Active Coding, Linting & Formatting Automation

  1. Auto-Format on Save (Ctrl+S)

The editor now intercepts save sequences to apply programmatic code formatters [1]. If a conforming formatting tool is installed on the host system, the editor invokes the process, reloads the modified buffer, and confirms via toast notification [1]:

LanguageFormatting Binaries EvaluatedPythonblack [1]Web (JS, TS, CSS, HTML, MD, JSON)prettier [1]Gogofmt [1]Rustrustfmt [1]C / C++ / Header Filesclang-format [1]Rubyrubocop -a [1]Shell Scriptingshfmt [1]

The command can also be triggered manually via Ctrl+Shift+I or through Command Palette menus [1].

  1. Clickable TODO/FIXME Project Explorer

Adds an asynchronous workspace parser that queries files for comment markers: # TODO, # FIXME, # HACK, # NOTE, and # XXX [1].

Populates a prioritized, color-coded tabular list (green TODO, amber FIXME, red HACK, accent NOTE) in the bottom notebook [1].

Clicking any entry automatically opens the target file and sets the cursor to the exact line number [1].

🔌 Sidebar Plugin Switchboard & Chat Actions

  1. Sidebar Plugin Manager Panel

Registers a visual switcher view displaying the status of all 14 integrated services (including LSP, Heartbeat, Ghost Text, Home Assistant, Spotify, and Finance Bot) [1].

Implements toggle switches (Gtk.Switch) that dynamically modify runtime parameters (such as enabling/disabling inline ghost autocomplete or saving file-formatting scripts) and save active profiles to ~/.config/electra/plugins.json [1].

  1. Chat Message Actions

Rendered message elements now feature hover-triggered toolbar actions [1]:

Regenerate (↺): Re-runs the preceding prompt through the routing agent, rewriting the active chat stream [1].

Copy Raw (⎘): Captures unrendered markdown strings directly to the clipboard [1].

Communicates directly with python core runtimes via an expanded electraAction(action, data) WebKit title bridge [1].

  1. Comprehensive Markdown Parser Refactor

Full CommonMark Tables: Renders striped HTML table tags directly inside markdown text buffers [1].

Task List Checkboxes: Replaces raw markdown markdown blocks (- [ ] / - [x]) with interactive, CSS-formatted checked/unchecked status symbols [1].

Formatting Syntaxes: Supports ordered lists, strikethrough (~~), combined bold-italic, custom links, and thematic breaks (---) [1].

🎛️ Detailed Status Bar, Keybindings, & Bug Fixes

Advanced Workspace Analytics: The editor status bar now provides dynamic metrics [1]:

Active selection statistics detailing line, word, and character counts (e.g., (3 Ln, 47 W, 218 Ch selected)) [1].

Raw file size estimations (e.g., 42 KB) [1].

Line ending formats (LF vs CRLF) and active tab/spaces indentation guides (with support for clickable conversions) [1].

New Hotkeys Registered:

Ctrl+G — Go to Line [1].

Ctrl+K — Inline AI selection edit (triggers model-prompt replacements with side-by-side diff approvals) [1].

Ctrl+Shift+T — Opens the active workspace TODO/FIXME comments panel [1].

F9 — Focuses the bottom Python REPL tab [1].

🐛 Image Tab Closing Fix: Corrected openimage_preview so that both WebKit and Gtk.Image preview panes are encapsulated using maketab_label and configured with set_tab_reorderable, preventing locked, unclosable visual preview sheets [1].

Ghost Text — Full Implementation

Three helper functions: ghostget_model(), ghostadvance_model(), ghostreset_model(). After a successful completion, resets to the fastest primary. After timeout/empty, advances to the next. After full rotation it wraps back — no permanent demotion.

Ghost models are completely separate from CODING_MODEL — they never compete for tokens or rate limits with the main coder agent.