Releases: AitiX/Fastlogs
Release list
FastLogs 0.5.3 - GameMaker crashes + a real no-UI mode
Fixed
- Crash grouping worked for Unity only. GameMaker writes
[hh:mm:ss] LEVEL: message
lines and a===== FASTLOGS SESSIONmarker; the server's parser knew only Unity's
[E] +12.345 messageand==== FastLogs session. Every GM log therefore parsed to
zero entries and every GM crash got a null signature, so the Crashes tab was silently
empty while the viewer rendered the same log fine. Both grammars are now parsed, one
crash keeps one signature across engines, and Unity signatures are unchanged (existing
groups do not split). GM logs already stored were stamped "not a crash" at ingest and
the lazy backfill only revisits unknowns, so a one-time migration (user_version=1)
clears that sentinel for GM rows and lets them regroup; Unity rows are untouched. UI > EnableUIdid not disable the UI. It was read in exactly one place - the loop
guard's confirm dialog - so clearing it still constructed the IMGUI overlay, its
settings panel and a toggle gesture polling input every frame. It now withholds both.
Added
FastLogsHeadlessServices: capture, upload, screenshots and clipboard with no overlay
and no gesture, independent of the config asset.FastLogs.SetServicesProvider(new FastLogsHeadlessServices())is the documented way to run FastLogs as a plain library.- The bundled implementations are public and composable:
FastLogsDefaultServices(now
subclassable - override one factory, keep the rest),CapturingLogSource,
UnityWebRequestUploader,ScreenshotCapturer,ClipboardService. Previously the UI
classes were public while everything else was internal, so "everything except the UI"
was the one thing you could not assemble. - Contract 1a makes the
logTextgrammar normative (entry lines, session marker, stack
frame shapes) and 7.11-7.12 spell out engine identification. A client writing its own
line format is accepted with a 201 and looks healthy while Crashes, level filters and
session dividers are silently dead - which is what happened to GameMaker. - First captured fixture (
server/test/fixtures/) plus a sha256 guard: a real player's
payload now runs through ingest in the test suite. It immediately pinned a contract
fact - the Unity client sends nodevice.application.engineat all and is labelled
Unity only by the server's fallback, the same fallback that mislabelled GameMaker. - CI guard keeping the declared engine-free files free of direct
UnityEnginereferences.
Changed
- BREAKING: the command channel's poll/ack tier now always requires a token. An app
with no token configured could previously be polled and acked by anyone who knew its
id. Registered apps carry a token already and are unaffected. - MCP dereferencing of offloaded results is restricted to the configured origin (SSRF).
- Log-store compaction uses a low-watermark: the store was rewritten in full on every
line past the cap (~2 MB of IO and ~16 MB of garbage per line at a 2 MB cap). - Serialized-field reflection is cached per type; component change detection hashes in
place; the IMGUI driver stays disabled unless something is actually on screen. - Sweeper drains its backlog instead of one batch per tick;
X-Forwarded-Foris no
longer trusted blindly; a file cannot be attached to another app's log. - GameMaker reports send
device.application.engineexplicitly, so they no longer rely
on the server's version-string heuristic.
FastLogs 0.5.2
Added: oversized command results are offloaded instead of lost. A result past the server's inline cap (COMMAND_MAX_RESULT_BYTES, 64 KB) is uploaded as a file and the ack carries {"__fastlogsResultRef": "", "bytes": N} - previously such an ack was rejected with a 400 that an agent only ever saw as a timeout, leaving the command stuck in dispatched forever. The MCP server dereferences the link transparently, so a wide fastlogs.inspect or a big custom dump reads exactly like a small result; a failed offload acks as an error with the size and cause rather than a dead link. Note: file blobs are not PII-scrubbed (contract 1b). Verified: 94 Unity EditMode tests and 13/13 end-to-end assertions against a real built player (a 150 KB result round-tripped intact). Install (Unity): https://github.com/AitiX/Fastlogs.git?path=/unity#v0.5.2
FastLogs 0.5.1
Added: command-to-report correlation - while a command runs, any report it produces is tagged with that command id, so GET /api/await/?code= returns exactly what the command caused instead of matching on timestamps (scope semantics: the previous code is restored, overlapping commands nest, and a handler that sets its own code wins; off switch Commands.CorrelateReports). Added: fastlogs.inspect - a pointed, read-only query for live component state ({type, go?, props?, max?} returns serialized fields plus Renderer/MaterialPropertyBlock probes) instead of pulling a whole scene dump; works regardless of ComponentCapture.Enabled. Verified: 87 Unity EditMode tests, 260 server tests, and 12/12 end-to-end assertions against a real built player. Install (Unity): https://github.com/AitiX/Fastlogs.git?path=/unity#v0.5.1
FastLogs 0.5.0 - agent tooling
Added: liveness beacon for the command channel (GET /api/commands//health, admin or scoped command token) reporting pollingNow / lastPollAt / lastPollSecAgo, stamped on every poll including idle ones - it tells an agent 'no build is running' apart from 'the handler hung', which otherwise look identical (CONTRACT section 8e; COMMANDS_LIVENESS_SEC, default 10). Added: MCP server (server/mcp/) exposing the API as native agent tools - run_command (enqueue and wait), enqueue/result, channel_health, await_log, search_logs, get_log; an isolated subpackage with its own dependencies, so the server core keeps its single dependency. Verified: 260 server tests, the end-to-end harness against a real built player (9/9), and the MCP tools driven against that same real player (7/7). Install (Unity): https://github.com/AitiX/Fastlogs.git?path=/unity#v0.5.0
FastLogs 0.4.3
Fixed: the Unity package now declares its built-in module dependencies (IMGUI, UnityWebRequest, ImageConversion, ScreenCapture, Physics) - a clean project that did not already pull these in failed to compile the package. Caught the first time the new end-to-end harness built a throwaway player. Added: in-repo end-to-end harness (test/e2e/) that boots the real server and drives a real built player over the command channel; log viewer folds each recorded run under a collapsible session divider. Install (Unity): https://github.com/AitiX/Fastlogs.git?path=/unity#v0.4.3
FastLogs 0.4.2
Component capture hardening, proven by a live flood regression (uncapped-fps player, a field changing every frame): scan cadence is now time-based (ScanIntervalSeconds, default 0.5), change captures are debounced per instance (MinSecondsBetweenChangeCaptures, default 1s), and MaxCapturesPerSession now stops only AUTOMATIC captures - a manual pass (fastlogs.capture) keeps working and returns a structured JSON result; an ev:cap marker lands in the log ring when the cap trips. BREAKING: ComponentCapture.ScanIntervalFrames replaced by ScanIntervalSeconds. Install (Unity): https://github.com/AitiX/Fastlogs.git?path=/unity#v0.4.2
FastLogs 0.4.1
Fixed: built-in command names are all-lowercase (fastlogs.scenecontext); the server rejects uppercase command names, so the documented camelCase spelling could never be enqueued. Also ships the scoped COMMAND_TOKEN, the /api/v1 canonical alias and online backups (script + daily systemd timer). Install (Unity): add https://github.com/AitiX/Fastlogs.git?path=/unity#v0.4.1 to Packages/manifest.json.
FastLogs 0.4.0 - the agent channel
Two-way agent channel (remote commands + headless send), config-driven component capture, asmdef helper, EditMode test suite, scoped COMMAND_TOKEN, /api/v1 alias, online backups, restructured docs (EN facade + RU guides). See CHANGELOG.md for details. Install (Unity): add https://github.com/AitiX/Fastlogs.git?path=/unity#v0.4.0 to Packages/manifest.json.