Skip to content

1.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 28 Jun 00:46

r2 in the REPL (new)

The REPL gains radare2 as a first-class language alongside JavaScript.
The prompt is a clickable mode toggle, and :, :r2, :js switch
from the keyboard. r2 input routes through the session disassembler
and renders JSON commands as an inspectable value tree, everything
else as ANSI-parsed styled text.

  • Autocompletion for both languages: r2 commands complete via r2's
    own help tree and arguments against flag and symbol names; JS
    completions are annotated with Frida types from the embedded
    frida-gum typings.
  • px/x hexdumps render in the interactive hex view with real
    addresses; r2 results keep their colors when pinned to the
    notebook.
  • The REPL seeds its seek to the main module base on open, and
    persists the r2 seek as an address anchor that re-bases across runs.
  • Output and prompt reworked: long lines scroll horizontally instead
    of wrapping, long text reveals in chunks with show-more / show-all,
    the prompt is a single mode-colored glyph, and the empty state
    shows a per-mode example.

Markdown rendering (new)

A block-level Markdown renderer ported into LumaCore and shared by
both frontends: headings, lists, tables, task lists, blockquotes,
code blocks, and footnotes, with inline spans, LaTeX-to-Unicode
rewriting, and StyledText code highlighting. Based on code by
@trufae.

Sidebar: modules & threads

  • Modules and threads move from tabs into collapsible sidebar groups
    that mirror the hooks UX — a few top picks plus a browse popover
    for the rest, with threads collapsed by default. One sidebar-row
    and one browser-popover component is now shared across hooks,
    modules, and threads in both frontends.
  • Instrument hooks get a disclosure chevron with per-instrument
    collapsed state persisted in session UI state.
  • Module analysis is lazy with a per-module Analyze action and status
    indicator; persisted analyses replay into a fresh r2 core on attach
    to restore last session's warm state without blocking.
  • Program modules group ahead of system ones.

Disassembly

  • Hex address operands are clickable for the pointer actions while
    the rest of the line stays selectable; the reread/reanalyze buttons
    overlay instead of pushing content down.
  • First-view disassembly analyzes the function on demand so it stops
    at the function end instead of overshooting, and draws jump/call
    flow arrows sourced from pdj/pDj.
  • Fixed operand address context menus that the system selection menu
    was hiding (macOS) or opening alongside (GTK).

Collaboration

  • The redundant "driver" seat is gone; session interaction gates on
    ownership. Hosting is claimed through an acknowledged request and
    attaches only once the server accepts, instead of optimistically.
    Spawn/attach/re-attach controls gate on owner + lab-joined + seat
    free, and re-attach is disabled while offline.
  • Host-ownership checks resolve before the collaboration bus connects
    via Engine.localUserID (falling back to the GitHub identity), so
    the banner, REPL, and host badge are correct before reconnect.
  • Token poll retries on transient network loss, so switching to the
    browser to authorize on iOS no longer kills sign-in.

Fixes & internals

  • Existing project databases gain the REPL, seek, and styled-notebook
    columns on open — create-if-not-exists never altered shipped
    tables, so saves failed.
  • Custom instrument handling hardened; runtime parsing and rendering
    guarded; mission transcript updates throttled and context reads
    optimized; agent bundles generated through a SwiftPM plugin. Thanks
    to Sunwoo Moon (@eunhhu).
  • JS REPL completion no longer dumps global scope; out-of-range JS
    numbers no longer trap.

Packaging

  • The Nix flake exposes an overlay and extracts package.nix so the
    package can be consumed standalone. Thanks to Abhi (@AbhiTheModder).