Skip to content

0.7.0

Choose a tag to compare

@github-actions github-actions released this 12 May 16:50
· 731 commits to main since this release

Instrument compatibility (new)

Each instrument carries an InstrumentCompatibility (platforms,
osIDs, archs). Hook pack manifests and custom defs declare it; tracer
and codeshare default to universal.

  • Pickers gray out mismatched descriptors with a tooltip and disable
    Add; sidebars badge instruments skipped at restore time.
  • Custom defs grow a Compatibility… popover with canonical Frida
    values (macOS, x86_64, MIPS, …).
  • Editing a def re-evaluates compatibility: tightening detaches now-
    incompatible instances, loosening reattaches previously skipped
    ones.
  • Restoring an incompatible instrument marks it with a reason on the
    InstrumentRef instead of attaching.
  • Exposed to mission tools via create_custom_instrument.

Document lifecycle & storage

  • Workspace is gone; each open document owns its own Engine
    through EngineRegistry. MainWindowView.init is a pure lookup,
    so SwiftUI's view-tree re-evaluations no longer open extra
    ProjectStores that race the live one's BEGIN IMMEDIATE.
  • Engines shut down cleanly on document close: event log tasks
    cancelled, device watchers stopped, MCP servers stopped, process
    nodes detached, collaboration torn down.
  • Engine open failures surface as an error view instead of a crash.
  • UI-state persistence (sidebar selection, collaboration panel
    visibility, session detail section, event-stream collapse) moved
    onto Engine and adopted by both frontends.
  • db.sqlite stamps a PRAGMA user_version on creation; opening a
    project with a mismatched version is refused with a structured
    error instead of crashing inside GRDB.
  • SQLite gets a 5s busy timeout.

Tracer & MCP

  • Tracer hook state is an enum (.enabled / .disabled), with room
    for future cases. update_tracer_hook accepts and returns it as a
    string. The unused isPinned hook field is gone.
  • MCP tool calls get stable per-mission ids (t<n>) surfaced via
    _meta. JSON-RPC ids are only unique per connection, so reconnects
    used to break record_finding's evidence lookup.
  • Mission system prompt steers agents toward getGlobalExportByName
    / getGlobalFunctionByName and explicit platform guards over
    silent find* null checks.

UI / UX (macOS)

  • Picking a lab from Welcome opens a new untitled doc; the previous
    pre-created .luma directory was rejected by the document reader.
  • Add Instrument blocks duplicates: already-attached descriptors dim
    with a banner and a disabled Add action.
  • REPL has an empty state.
  • Pinned events keep their title and inspectable payload after pinning
    (the runtime event's JSInspectValue flows into the notebook entry,
    and the descriptor's display name is resolved for custom
    instruments).
  • Blank projects auto-select the notebook to match the detail-pane
    fallthrough.
  • Sidebar row icons inherit the primary color so selected rows invert
    them to white instead of fading into the accent fill.
  • Welcome action subtitles and Sponsored-by row spacing polished.

GTK frontend

  • Adopts the new Engine UI-state APIs: collaboration panel
    visibility and event-stream collapse persist per project, matching
    the SwiftUI host.
  • Sidebar hides empty Sessions / Custom Instruments / Packages
    sections; tighter spacing via a .luma-flush-listbox CSS class.
  • Session detail re-renders modules and threads on every state apply,
    so initial agent enumeration shows up even if threadDeltas raced
    past the first emit. Summary keys are left-aligned via a
    SizeGroup.
  • Add Instrument dialog groups custom defs under a Custom Instruments
    header, matching the SwiftUI host.
  • Boolean features render as CheckButton with the name as the
    label, matching SwiftUI's checkbox-style Toggle.

Internal

  • LLM capabilities are now Set<LLMCapability> with a supports(_:)
    accessor on LLMProviderCapabilities and LLMModelInfo.