0.8.0
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 anonConsoleInput
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 intocreate_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 anactivePath. - 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
.engineevent 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/EditorBaseThemetypes
onEditorProfile. - 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_eventsandwait_for_event
embed payloads as JSON with$typesentinels for
NativePointer,BigInt,Date, typed arrays,Map,Set,
and friends. Tracer events decode into named fields with caller
and backtrace pre-symbolicated.eval_replinlines its result instead of returning an opaque id.list_modulesaccepts filter and cap parameters.submit_console_inputdrives the new console widget; the
consolewidget kind is exposed through
create_custom_instrument.- Mission row updates diff by
updatedAtso 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.lumadirectory. Cmd+N/Cmd+Obind 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).