Commit Graph
6 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 3f70d259d3 core: Persist pattern placements
Store them with the REPL cell and the address insight, as a JSON
column each, and bind the decode view to them. Older rows and wire
cells without the field decode as none.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås a5355458fc core: Store insight addresses as a bit pattern
GRDB maps UInt64 through Int64(self), which traps above Int64.max.
Give the record its own container and row init.
2026-09-10 12:51:32 +02:00
Ole André Vadla Ravnås dd71943d94 Allow naming address insights
Replace the auto-derived title with userTitle (nil = auto)
and a parentInsightID link. Display name is userTitle, else
<parent.title>+0x<delta>, else sub_<offset> if at a function
start, else module+offset. Sidebar context menu Rename… and
an LLM rename_insight tool both go through Engine.renameInsight,
which broadcasts via the existing updateInsight op and pushes
the new name into r2 as a flag (plus afn at function starts).

getOrCreateInsight kicks off a background pass that links a
new insight to its enclosing function-start insight, and
adopts siblings inside its region when the new insight is
itself the function start. The same adoption runs when a
fresh ModuleAnalysis newly reveals a function start under an
existing insight.
2026-05-19 16:01:25 +02:00
Ole André Vadla Ravnås 9d02419562 Sync sessions across collaborative labs
Sessions in a lab are now collaborative artifacts. Any owner can
host (own the local Frida attachment) and any owner can drive
(issue REPL evals and instrument commands); a driver's actions
are relayed to the current host. Members watch read-only and see
an "Only lab owners can host sessions" CTA when they try the new
session button.

Re-host (Run on My Device…) lets an owner take over a running
session by attaching to their own equivalent process; the prior
host's Frida attachment detaches and the new host auto-loads the
session's instruments. Driver auto-reverts to host when the
current driver fully disconnects from the lab.
2026-04-30 23:28:15 +02:00
Ole André Vadla Ravnås 316c82c908 Use GRDB records idiomatically
All model structs now conform to FetchableRecord +
PersistableRecord with snake_case table/column names.
GRDB handles Codable encoding/decoding automatically.

ProjectStore rewritten to use the type-safe query builder:
model.save(db), Model.fetchAll(db), Model.filter(...),
Model.deleteOne(db, key:) — no raw SQL remaining.
2026-04-06 21:49:41 +02:00
Ole André Vadla Ravnås 42c8115bab Add persistence models and ProjectStore CRUD
Define all domain model structs as plain Codable types in
LumaCore, replacing the SwiftData @Model classes:

  ProcessSession, InstrumentInstance, REPLCell, NotebookEntry,
  ITraceCaptureRecord, AddressInsight, InstalledPackage,
  ProjectPackagesState, ProjectCollaborationState,
  TargetPickerState, RemoteDeviceConfig

Flesh out ProjectStore with complete GRDB/SQLite CRUD for
all 11 tables. Both the SwiftUI and GTK frontends will use
this as their persistence layer.
2026-04-06 20:13:59 +02:00