Skip to content

0.8.0

Choose a tag to compare

@github-actions github-actions released this 17 May 02:12
· 609 commits to main since this release

Console widget (new)

Hook packs and custom instruments can declare an interactive
console widget — a REPL-style I/O panel rendered alongside the
existing aggregates (counter, histogram, graph), collections (list,
table) and raw (hex) widgets.

  • Agent-side: appendConsole, appendValue, and an onConsoleInput
    hook with a responder argument. Replies are tagged and terminated
    by a sentinel so a single submission can stream partial output
    before completing.
  • Host-side: persisted per session, hydrated on instrument load, and
    replayed when remote portal state catches up so late joiners see
    the full transcript.
  • JS values render through the inspector (collapsible structured
    trees), and any entry can be promoted to a notebook pin.
  • Exposed to mission tools via submit_console_input, with the
    widget kind itself wired into create_custom_instrument.

The widget canvas is disabled when there is no live instance or the
session is detached.

Multi-file custom instruments

Custom instruments grow from a single source blob to a tree of
named files.

  • Sidebar shows a disclosure group of files under each def; the
    editor drives Monaco project models with an activePath.
  • Add / Rename / Delete file dialogs validate input and submit on
    Enter.
  • Installed hook packs can be forked into editable custom
    instruments, carrying their full file set across.
  • Instances reload on def change; stale compatibility reasons
    clear live as edits land.

Typed instrument status & diagnostics

The previous bare "incompatible reason" flag is now an
InstrumentStatus enum (.incompatible, .loadFailed,
.reloadFailed, .configInvalid) that travels over the
collaboration wire.

  • TypeScript build errors come through as CompilerDiagnostic /
    CompileFailure, pretty-printed in the frida-tools format
    (path:line:character - category TS<code>: text) with the
    on-disk path rewritten to the user-facing display name.
  • Tracer compile failures are attributed per hook, so the warning
    icon lights up on the broken hook row instead of the instrument.
  • The sidebar warning icon is now a button that opens a popover
    with the headline, summary, and diagnostic stack. Tracer hook
    rows reuse the same indicator.
  • LumaCore prints (devices, packages, attach, spawn-gating,
    instruments, hookpacks, repl, itrace, editor) route through a new
    .engine event source instead of stdout, so host-tier issues land
    in the event stream.

Editor

  • New GitHub Light / Dark Monaco themes, picked automatically from
    the color scheme. Frida factory profiles default to GitHub Dark
    and ship both. Custom themes can be injected via the new
    EditorCustomTheme / EditorTokenRule / EditorBaseTheme types
    on EditorProfile.
  • 1pt hairline border around the editor in the tabs-border color.
  • Light-theme scrollbar strengthened for visibility.
  • Tracer hook editor and custom-instrument file editor prompt
    Save / Discard / Cancel before navigating away with unsaved work.
  • GTK drops its vendored Monaco bundle in favor of the SwiftyMonaco
    bundle resource; macOS dev builds get a WKWebView shim so the
    GTK frontend can run there.

MCP / agent tooling

  • read_event(event_id) returns the full uncapped payload of any
    emitted event. summarize_recent_events and wait_for_event
    embed payloads as JSON with $type sentinels for
    NativePointer, BigInt, Date, typed arrays, Map, Set,
    and friends. Tracer events decode into named fields with caller
    and backtrace pre-symbolicated.
  • eval_repl inlines its result instead of returning an opaque id.
  • list_modules accepts filter and cap parameters.
  • submit_console_input drives the new console widget; the
    console widget kind is exposed through
    create_custom_instrument.
  • Mission row updates diff by updatedAt so the sidebar avoids
    flicker.

Collaboration

Many small fixes around host / owner semantics:

  • Host operations are gated on actual node ownership; wire
    forwarding is gated on remote node liveness; orphaned hosts are
    detached after reconnect.
  • Take-over from a non-host owner re-hosts cleanly. Portal
    state catch-up re-emits the snapshot so late joiners receive it.
  • The session detail gains a hosted-elsewhere banner with the
    detach reason; the detach marker stays off rows hosted by others;
    detached sidebar rows show a reattach badge.
  • The hosted-by banner moves into the sidebar as an avatar
    inline with the session title.
  • A joining-lab indicator surfaces while the connection is being
    established.

Chat:

  • Outgoing messages send optimistically and reconcile with the
    server-stamped version (or roll back on failure, restoring the
    draft).
  • The chat list and participant list patch per change instead of
    rebuilding — a ~200-row construction win on every send for a
    100-message buffer.
  • Server timestamps are parsed instead of synthesized locally.

Lab pictures:

  • Owners can change the lab picture on both macOS and iOS, picker
    driven by a SwiftUI modifier. Uploads are force-rescaled and
    stripped of EXIF.

iOS (iPhone)

A round of compact-width polish for the iPhone surface:

  • Missions sheet, new-mission sheet, and tracer config view all
    fit to compact width; ITrace controls are reachable from the
    tracer menu.
  • Custom instrument editor is now routed on phone; metadata
    actions moved into the editor where they belong.
  • Chat drawer respects the keyboard inset.
  • Welcome content centers vertically and the user name
    ellipsizes; compatibility grid columns widen.
  • Local chat bubble contrast and editor chrome polished.

UI / UX

  • Open Memory shortcut on the session detail Base row and the
    modules list right-click menu (both frontends).
  • Sidebar adopts Finder-style indentation: child icons start where
    the parent icon ends.
  • Custom instrument metadata menu (Rename, Edit Compatibility,
    Delete) on the sidebar row.
  • Event stream anchors to bottom and no longer auto-pauses when
    collapsed; the collapsed bar centers its summary.
  • The project document no longer marks itself dirty on commit, so
    close / reboot stop prompting for changes that already persisted.
    Documents autosave back to their source .luma directory.
  • Cmd+N / Cmd+O bind to New / Open on macOS.
  • Welcome action subtitles and sidebar / editor chrome polished;
    GTK adopts sentence case for sidebar section headers.

Dependencies

  • frida-core / frida-swift bumped to 17.9.10.
  • SwiftyMonaco rolled forward several times (multiline
    semantic-tokens fix; bundle-output path correction; GitHub
    themes).