Adds a third export alongside pull history and achievements: the cartridges,
modules, character levels and equipped console boards the game sends at login.
Shaped as added files plus a handful of one-line calls, so this repo can keep
merging upstream:
- decoder/gear.py: self-contained bit-level decoder over a list of datagrams.
- export/gear_export.py: the nte-gear-export envelope.
- live_capture/gear_collector.py: UDP flow accumulation, the mid-capture
decode, the fallback scan, the console line and the export file.
Gear is reported during the capture rather than only at the stop. The burst
arrives in a rush and then stops, so "this flow went quiet" is the only
mid-stream marker available; a flow is retried only once it has grown, since
decoding per packet would be quadratic in flow size.
Flows are tried largest first and the first one that decodes wins - picking
the single biggest was wrong, history traffic can outweigh a short login
burst.
Verified against a live capture: 817 items (310 cartridges, 507 modules),
20 characters, 13 loadouts, every bucket matching the in-game counts exactly.
26 synthetic tests, no real capture used as a fixture; 149 total.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>