ACEWire-compress.mp4
Client-first packet logging MVP for Asheron's Call with LLM-oriented context output.
See dev-readme.md for performance benchmarking, test coverage gates, and debug guardrail scripts.
src/ACEWire.Core- Pipe frame model and reader
- AC packet parser (header + fragment/control decode)
- Session state tracker
- LLM context builder
- NDJSON writer
src/ACEWire.DesktopApp- WPF live packet logger window
- Filters, details, copy context, export NDJSON
mods/AceWireAgentMod- ACE BaseMod-compatible server-side Harmony patch module
- Emits server NDJSON for Phase 2 client/server correlation
native/pldllpl.dllsource capture hook- Writes binary frames to
\\.\pipe\ACPacketLog - Falls back to
%TEMP%\ACPackets_*.binif no pipe consumer exists
dotnet build ACEWire.slnBuild only the server mod:
dotnet build mods/AceWireAgentMod/AceWireAgentMod.csprojdotnet run --project src/ACEWire.DesktopApp/ACEWire.DesktopApp.csprojThe app will wait for pl.dll frame input on named pipe ACPacketLog.
Use a Win32 toolchain; AC client is 32-bit.
Example CMake flow (Visual Studio generator):
cmake -S native/pldll -B native/pldll/build -A Win32
cmake --build native/pldll/build --config ReleaseProduced DLL target name is pl.dll.
If you install LLVM-MinGW UCRT:
winget install --id MartinStorsjo.LLVM-MinGW.UCRT --accept-package-agreements --accept-source-agreements --silentThen build pl.dll with:
powershell -ExecutionPolicy Bypass -File .\scripts\build-pldll.ps1This writes:
.\pl.dll.\src\ACEWire.DesktopApp\bin\Debug\net9.0-windows\pl.dll
- Ensure ACEWire has its own
pl.dll:- Preferred: put
pl.dllnext toACEWire.DesktopApp.exe - Dev convenience: put
pl.dllin repo root (ACEWire\pl.dll) and build; it is copied to output automatically.
- Preferred: put
- Start
ACEWire.DesktopApp. - Select AC folder path in the UI (or click Browse).
- Click
Deploy pl.dll. - Start AC client and inspect live packets in UI.
- Use
Copy LLM Contextfor quick troubleshooting context. - Use
Export NDJSONfor offline analysis. - Optional Phase 2 path:
- Build/deploy
AceWireAgentModinto ACE mods folder. - In desktop app, click
Load Server NDJSONto import server stream. Copy Session Summarywill include client->server causality pairs when server events are loaded.
- Build/deploy
On ACEWire exit, deployed pl.dll is removed and previous pl.dll is restored (if backup exists).
If cleanup fails, AC is usually still running and holding pl.dll open.
- UI updates are batched (timer-based) instead of per-packet dispatch.
- Packet table rows are capped (
3000rows) to keep the grid responsive. - Event history is capped (
25000events) to prevent unbounded memory growth. - Raw hex payloads are truncated per event for display/storage efficiency.
- Export status includes history-drop count if older events were evicted.
- Auto-scroll follows new packets by default (Wireshark-style tailing).
- If you scroll away from the bottom, auto-scroll turns off.
- Click
Resume Auto-Scrollto jump back to live tail. - Filter controls:
Direction(Both/C2S/S2C)Opcode Filter(opcode name/hex)Filter Query(searches preview + opcode + hex + direction + sequence/time text)