Commit Graph
506 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 69c706789f Follow the pattern compiler's module API
Compile, then decode through the module. Pass platform before arch,
and default both to the host rather than darwin/arm64.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 72621a231d ui: Show decoded patterns in the inspector 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 0659f5f14e core: Expose virtual machines to LLMs 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 660946f2c0 Share VM keystroke events 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 3d20980966 ui: Read more memory when a decode runs out 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås bbf63ec269 core: Expose patterns to LLMs
Let a model list, check and write patterns, decode memory with them,
and place them on insights.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås f96764edf7 ui: Move insight refreshes to the sidebar menu 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås b93116f9e9 ui: Collapse patterns in the sidebar 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås f3e36dbeba ui: Visualize and navigate decoded patterns
Show detached visualizers in popovers and inline ones in place. Move
through the tree with the keyboard, and scroll the hex view and the
tree separately.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 65e2cab5ae ui: Give the pattern editor a pane's chrome
Drop its padding and border for a divider along the top, so it sits
flush against the sidebar as Xcode's editor does.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås a6f769221f ui: List pattern types in the sidebar
Show each file's declared types under it, with a browse popover when
there are many, and reveal a type's declaration when it is chosen.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 5e81f32cba ui: Fold code and preview colours in the editor
Draw line numbers and the current line's band in a gutter, with fold
chevrons that fade in while the pointer is over it, and a guide down
each open scope. Collapse a folded range behind a placeholder, and put
a swatch before each colour the server reports.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås b83995dcce ui: Add a patterns section with an editor
List the library's files in the sidebar with new, import, rename and
delete, and edit each in the code editor, which now colours by syntax.
2026-10-01 20:49:11 +02:00
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 82a228204d ui: Decode hex dumps against pattern types
Place a struct at any byte from the context menu, or run a file's own
placements. Outline each leaf field in the hex view, and select the
innermost field on a byte click.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 3916fbf131 ui: Wrap the hex caret across rows 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås c94525fb8a ui: Match the machines empty state to the notebook
Share the notebook's heading, add a button that boots a machine, and
leave out the panel title while there is nothing under it.
2026-09-29 15:38:58 +02:00
Ole André Vadla Ravnås 19071308ce ui: Lay out the side panel without HSplitView
HSplitView sizes itself to its panes' preferred widths rather than the
window, so at narrow widths the panel ran past the window's edge and
was clipped. Hold the panel's width ourselves and resize it through a
handle, keeping it within what the detail pane leaves.
2026-09-29 15:38:58 +02:00
Ole André Vadla Ravnås df18361fd5 ui: Render hex view rows lazily
Draw each row as a single Text in a LazyVStack, redraw only rows whose
selection changed, and hit-test from the font's metrics instead of
measuring every cell.
2026-09-28 18:50:12 +02:00
Ole André Vadla Ravnås d03d600547 ui: Show a boot screen while the VM starts 2026-09-28 17:35:15 +02:00
Ole André Vadla Ravnås 9edcbd969e ui: Span the event stream across the window 2026-09-28 17:35:15 +02:00
Ole André Vadla Ravnås e0ad16494c ui: Make the detach banner error readable 2026-09-28 17:35:15 +02:00
Ole André Vadla Ravnås 8d12aa4d7f core: Carry the app icon on a spawn target 2026-09-28 17:35:15 +02:00
Ole André Vadla Ravnås e464fd6f02 ui: Keep the REPL input above the event stream
Inset the detail column instead of the split view, which
does not shrink the detail for a bottom safe-area inset.
2026-09-28 00:39:33 +02:00
Ole André Vadla Ravnås 4aa17098b2 core: Speed up and simplify the VM picker
templates and availability spawned `emulator -list-avds` on every
render, so opening the boot sheet -- and clicking a template, which
re-queries them all -- stuttered for seconds. Cache the listing and
warm it off the main thread when the picker or sheet appears.

Collapse the two per-architecture Android entries into one; the
chosen AVD now decides the architecture, retiring the message that
wrongly claimed Frida could only instrument the other one.
2026-09-27 17:55:08 +02:00
Ole André Vadla Ravnås d55c6eb128 ui: Hoist the split view to tint the sidebar
Make NavigationSplitView the window's root so its sidebar tints its
slice of the titlebar natively, the way Xcode's does. Move the side
panel into the detail column and the event stream to a bottom
safeAreaInset with an opaque background, so the stream spans the full
width and pushes the content up whether or not the sidebar is
showing. Replace CollapsibleVSplitView with a SwiftUI resize handle
and collapse bar.
2026-09-27 17:33:13 +02:00
Ole André Vadla Ravnås 6a8052bb37 ui: Skeleton the target list while enumerating
Give the detail side the same placeholder rows as the device list:
while a device enumerates, with a status footer that keeps the
connection-stage readout; and while devices are still being
discovered, so the detail never flashes "Select a Device" first.
2026-09-27 16:29:26 +02:00
Ole André Vadla Ravnås 2282318aa7 ui: Show skeleton device rows while discovering
Render redacted placeholder rows in the same list the loaded state
uses, so the sidebar keeps its shape and the swap to real devices
is a fill-in rather than a jump from empty space.
2026-09-27 16:14:55 +02:00
Ole André Vadla Ravnås 363d1c6ca0 ui: Stop the picker clipping its mode control
The mode picker's maxWidth cap compressed and clipped its leading
segment on the first layout pass, before the detail column's width
resolved. Pin it to its natural size instead. Drop the redundant
discovery hint so the loading sidebar is just the header.
2026-09-27 16:06:02 +02:00
Ole André Vadla Ravnås 74b20474d1 ui: Keep the picker's device header while loading
The sidebar dropped its header and centred a lone spinner while
discovering, then snapped to the header and list once devices
arrived. Pin the header for every state so rows just fill in.
2026-09-27 15:55:18 +02:00
Ole André Vadla Ravnås 31b1bf2e70 ui: Hide the window toolbar's glass backdrop
The Liquid Glass toolbar backdrop frosted the top of the detail
column's content and drew a divider across it. Hide it so the
detail stays flush to the top.
2026-09-27 15:22:56 +02:00
Ole André Vadla Ravnås fe7fa5c3d3 ui: Fix the boot picker showing stale detail
Reset the parameters synchronously with the template selection instead
of a render cycle later, and key the detail on the template, so a newly
selected template no longer shows the previous one's fields.
2026-09-16 19:17:40 +02:00
Ole André Vadla Ravnås 67b08b72ca ui: Show how connecting to a device is going
Read the shared connection activity in the target picker and put the
current stage, with a progress bar that eases toward the next stage
over its expected duration, under the spinner in place of "Querying".
Show the stage on an attaching session's row too, since a session
re-establishing connects the same way.
2026-09-16 13:00:08 +02:00
Ole André Vadla Ravnås 91a979f3be ui: List every architecture a template offers
The sub-heading named the first variant, which the form lets you change.
2026-09-11 14:52:46 +02:00
Ole André Vadla Ravnås 4c115e7b53 Let the boot sheet's form scroll
The form asked for its intrinsic height, so capping the sheet clipped
it instead of scrolling it.
2026-09-11 14:31:26 +02:00
Ole André Vadla Ravnås adb8447dd2 Fit the boot sheet to what it shows
Bound its height so the form scrolls inside it, and leave the
architecture out of the pre-filled name; the row below says it.
2026-09-10 16:30:19 +02:00
Ole André Vadla Ravnås 52fcf32ac0 Put the kernel first in the process list
It is the one process nothing else stands in for. Name it as such,
and let the device rows ellipsize rather than widen the column.
2026-09-10 16:30:19 +02:00
Ole André Vadla Ravnås 7df308f30c core: Keep QEMU off iOS
Nothing there spawns a process, and the machine UI is AppKit's.
2026-09-10 16:29:56 +02:00
Ole André Vadla Ravnås 88c96c3423 build: Bundle QEMU in the macOS app
Unpack the published archive beside the LumaCore bundle, where the
app already looks, and sign every emulator for the hardened runtime;
TCG needs the JIT entitlements.

Name the build once now that more than Windows uses it, and keep a
checksum per platform.
2026-09-10 13:37:04 +02:00
Ole André Vadla Ravnås b88a9be290 Replace SwiftyMonaco with native editors
Drop the Monaco webview. Edit in a GtkSourceView on GTK and in a
native text view on Apple, both speaking to Frida.Compiler's
in-process language server for completions, signature help,
hovers and diagnostics.

Color, complete and indent code natively, matching the GitHub
theme in light and dark.
2026-09-08 19:52:31 +02:00
Ole André Vadla Ravnås 118d3958c5 Pre-fill the guest name with its architecture
Track the auto-filled name until the user makes it their own.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 991e261efc Select a freshly readied machine's device
Remember the device a boot asked for and select it once it appears,
rather than losing it to the reload that arrives first.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås ceb1baf2dd Settle a machine while it is stopping
Keep a stopping machine listed until its shutdown returns, guard
against a second stop, and let the button say so and go quiet
instead of firing again.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 7f2a39a6d5 Type the shifted characters into a machine
Map the shifted row so keys like ':' reach the guest, and hold
shift around a stroke that needs it. Send a character on its own
key-down, tapping down and up, rather than tracking its phases.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 225e703595 Pick and update the barebone agent version
Read the version stamped into a fetched agent's note, and list the
last releases from GitHub to learn what each flavor has published.

Offer the latest to download, name it on the button, and show an
update once a newer one lands. Drop the pinned version constant.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 49c8f7445b Say which machine a row is running
A machine named after its template showed no subheading at all, and
with one Linux template the architecture is half the story. Both
panels now say template and architecture, whenever that adds to the
name.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 18cd5564ab Say how far a download has come
Hitting Download gave nothing back until the file was there. Stream
the starter images and the agent through a delegate that reports how
much has arrived, carry the fraction in the downloading state, and
show the percentage in both boot dialogs as it moves.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås ad839e72cc Choose the architecture before what depends on it
The starter files and the agent follow the chosen architecture, yet
the choice sat below them. Put it with the machine's identity, right
after its name.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 4d218f1e2d Give Linux one template with an arch choice
The three Alpine templates said the same thing three times. Fold them
into one Linux template whose architecture is a parameter, defaulting
to the machine's own. A template now carries a variant per
architecture -- its agent flavor and starter images -- and resolves
the right one from the chosen parameters, so the boot dialogs offer
the starter kit and agent that fit the selection.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 906aa0f1aa Fix some rough edges 2026-08-20 23:44:14 +02:00