Structured log entry store for the GUI Messages tab.
Holds up to 1000 structured log entries with level, subsystem, timestamp, text, and optional file path. The GUI protocol encoder reads from this store to send incremental entries to the frontend.
The TUI continues to use the *Messages* gap buffer. Both are fed from
the same MessageLog.log/2 call site (dual-write).
Summary
Functions
Append a structured log entry. Trims to 1000 entries.
Returns entries with id > since_id (for incremental protocol sends).
Level byte for protocol encoding.
Mark the last sent ID (called after protocol encode).
Parse level and subsystem from a log message text prefix.
Subsystem byte for protocol encoding.
Types
@type level() :: :debug | :info | :warning | :error
@type subsystem() :: :editor | :lsp | :parser | :git | :render | :agent | :zig | :gui
@type t() :: %MingaEditor.UI.Panel.MessageStore{ entries: [MingaEditor.UI.Panel.MessageStore.Entry.t()], last_sent_id: non_neg_integer(), next_id: pos_integer() }
Functions
Append a structured log entry. Trims to 1000 entries.
@spec entries_since(t(), non_neg_integer()) :: [ MingaEditor.UI.Panel.MessageStore.Entry.t() ]
Returns entries with id > since_id (for incremental protocol sends).
@spec level_byte(level()) :: non_neg_integer()
Level byte for protocol encoding.
@spec mark_sent(t(), non_neg_integer()) :: t()
Mark the last sent ID (called after protocol encode).
Parse level and subsystem from a log message text prefix.
@spec subsystem_byte(subsystem()) :: non_neg_integer()
Subsystem byte for protocol encoding.