Commit Graph
11 Commits
Author SHA1 Message Date
Ole André Vadla Ravnåsandtrufae 2e00198952 Add block-level Markdown renderer
Port the mai-ios block parser into LumaCore; render headings,
lists, tables, task lists, blockquotes, code blocks and
footnotes across the SwiftUI and GTK frontends.

Parse inline spans and rewrite LaTeX to Unicode in LumaCore so
both frontends share one parser. Highlight code through
StyledText. Drop the inline-only AttributedString path.

Co-authored-by: trufae <[email protected]>
2026-06-26 16:00:59 +02:00
Ole André Vadla Ravnås 05544eb6cc Keep Notes & AI chat open during approvals
Approving a tool call popped the global action-queue popover,
which evicted the Notes & AI chat. Show approve/reject inline in
the address-note chat, with the tool's code preview, and skip the
global auto-present for ambient note-reply actions.

On GTK host the chat in an Adw.Dialog; a GtkPopover dismisses
itself during layout passes, so it can't stay open while the
reply streams. Render the code preview with a native monospace
view rather than the embedded web editor.

Track the in-flight reply text on the engine so it survives the
chat closing and restores on reopen.
2026-06-25 13:17:53 +02:00
Ole André Vadla Ravnås 2565350534 ui: Cancel address-note replies in flight 2026-05-21 02:01:00 +02:00
Ole André Vadla Ravnås 651e44b8bb ui: Fix editor background on iOS
Color(nsColor: .textBackgroundColor) is AppKit-only; route
through a platform-conditional helper so iOS gets
UIColor.secondarySystemBackground.
2026-05-20 19:23:26 +02:00
Ole André Vadla Ravnås b5fb460bc9 Show address notes while detached 2026-05-20 17:09:57 +02:00
Ole André Vadla Ravnås f685af3666 ui+gtk: Order threads oldest-first; mark active
Append new threads to the end and pre-select notes.last when
opening or after deletion. Show a check next to the active
thread in the switcher (SwiftUI Label icon, GTK
object-select-symbolic).
2026-05-18 19:25:43 +02:00
Ole André Vadla Ravnås 4e0565b031 ui+gtk: Allow renaming threads
Add a pencil button to the popover header that opens a rename
UI (SwiftUI alert / GTK inline popover) seeded with the current
title. Save via engine.updateAddressNote so the existing
noteUpsert collab op broadcasts the change.
2026-05-18 19:25:43 +02:00
Ole André Vadla Ravnås 7023e7b060 ui: Port note popover polish from GTK
Mirror the GTK thread UI: stacked save/ask buttons, edit and
delete on user messages with confirmation, auto-focus and
auto-scroll on open, right-side anchor, chat-style bottom
anchor when content is short.

Move the gutter indicator out of an offset overlay into a real
sibling so it receives clicks. Gate the disassembly key
shortcuts while the popover is open so Enter inserts a newline
in the editor.
2026-05-18 19:01:00 +02:00
Ole André Vadla Ravnås da5eca3d64 ui: Stream AI replies and tidy the note popover
requestAIReply now accepts an onDelta callback and forwards
provider textDelta events to it. Both frontends append a
placeholder assistant message that grows token-by-token, then
swap it for the persisted message on completion.

While here:
- GTK send button hides its icon when the spinner is showing
  (was awkwardly flush against it).
- Stack the Save and Ask AI buttons vertically so the text
  entry can be wider.
- Sticky-bottom scroll: stay pinned to the latest message as
  long as the user hasn't scrolled away.
- Show "Assistant" instead of "default" when the model id is
  unset / the provider's default.
2026-05-18 12:57:38 +02:00
Ole André Vadla Ravnås a52b49adb8 Luma: Show editor avatars on missions and notes
Extracts the avatar stack used by notebook entries into a shared
view; reuses it on the mission list/detail and in the address-
note popover header and message rows.
2026-05-18 00:29:07 +02:00
Ole André Vadla Ravnås d4a8f23241 Luma: Surface address notes in the disasm pane
Disasm-row context menu opens a popover with the address's note
threads, lets the user write notes or ask the LLM, and offers
"Go to function start" as a non-LLM nav helper. Gutter shows a
chat-bubble breadcrumb when a row has threads.
2026-05-18 00:29:07 +02:00