Ephemeral inline ask overlays keyed by buffer.
Inline asks are presentation state only. They are not persisted and they do not create workspaces until explicitly promoted.
The shared per-buffer store mechanics (active/2, put/2, dismiss/2,
session?/2) and prompt-input mechanics (append_input/2, backspace/1,
scroll/2) live in MingaEditor.InlineOverlay.Store and
MingaEditor.InlineOverlay.Prompt and are reused here. This module owns
only the ask-specific shape and transitions: the read-only response
accumulation and the :answered terminal state.
Summary
Functions
Builds the read-only prompt sent to the ephemeral agent session.
Marks the ask as answered.
Appends response text.
Marks the ask as failed.
Returns the prompt header.
Refreshes the visible status without changing session ownership.
Creates a new ask for a buffer.
Marks the ask as thinking.
Types
@type status() :: :input | :thinking | :answered | :error
@type t() :: %MingaEditor.State.InlineAsk{ anchor_line: non_neg_integer(), buffer_pid: pid(), context_text: String.t(), file_label: String.t(), file_ref: Minga.Project.FileRef.t(), prompt: String.t(), response: String.t(), scroll: non_neg_integer(), selection_range: {non_neg_integer(), non_neg_integer()} | nil, session_pid: pid() | nil, status: status() }
Functions
Builds the read-only prompt sent to the ephemeral agent session.
Marks the ask as answered.
Appends response text.
Marks the ask as failed.
Returns the prompt header.
Refreshes the visible status without changing session ownership.
@spec new( pid(), Minga.Project.FileRef.t(), String.t(), non_neg_integer(), {non_neg_integer(), non_neg_integer()} | nil, String.t() ) :: t()
Creates a new ask for a buffer.
Marks the ask as thinking.