busya
7bfc5553cf
feat: live app log console, cross-filter, JSONL export
Backend:
- /ws/app-logs — real-time app/cot log stream (raw JSONL)
- /api/logs/recent — REST snapshot of ring buffer
- GET /tasks/{id}/logs/export — streaming JSONL export with CoT parse + redaction
- Thread-safe ring buffer (seq-based polling) replaces unsafe asyncio.Queue
- GIL-friendly multi-row Core insert for log persistence
- task_id ContextVar propagates into CotJsonFormatter for CoT correlation
- Hot-apply logging level on settings update (FR-005)
- Buffer trim under DEBUG floods; drop DEBUG first, preserve ERROR/WARNING
- List projection (include_result=False) keeps reports list slim
- Security event consolidated to single REASON atom
Frontend:
- ReportsLogModel + ReportsLogPanel — full live JSONL console
- Cross-filter pinning: Tasks → Logs tab with task chip badges
- LogEntryRow — CoT-aware rendering (marker icons, expandable payload)
- TaskFilterChip, taskChipMeta — scannable type/id/env chips
- Global drawer push via CSS variable (lg+ padding, not overlay)
- i18n en/ru for all log console strings
- Ctrl+A in log panel selects only log lines (window-level handler)
QA fixes:
- Svelte 5 reactivity: SvelteDate/SvelteSet/SvelteURLSearchParams
- Fix seed_trace_id shadowing (F823) in lifecycle.py
- Remove dead code (selectedEnvironment, goToReportsPage)
- Add @BRIEF to C2 test functions, missing {#each} keys
- Remove unused import json as _json from app.py
All 3200+ frontend tests pass; backend lint clean.
2026-07-20 21:41:34 +03:00
..
2026-07-20 21:41:34 +03:00
2026-07-17 19:11:09 +03:00
2026-07-04 22:47:17 +03:00
2026-07-16 07:53:41 +03:00
2026-07-16 12:31:59 +03:00
2026-07-20 14:19:47 +03:00
2026-07-14 15:56:31 +03:00
2026-06-16 11:01:31 +03:00
2026-07-20 14:19:47 +03:00
2026-07-07 15:18:24 +03:00
2026-07-20 21:41:34 +03:00
2026-07-14 10:43:38 +03:00
2026-07-16 07:53:41 +03:00
2026-05-26 19:18:28 +03:00
2026-05-26 19:18:28 +03:00
2026-06-16 00:12:49 +03:00
2026-06-10 14:57:18 +03:00
2026-06-10 14:57:18 +03:00
2026-06-15 22:04:40 +03:00
2026-06-16 11:01:31 +03:00
2026-06-10 14:57:18 +03:00
2026-06-16 11:01:31 +03:00
2026-07-20 14:19:47 +03:00
2026-07-06 01:23:09 +03:00
2026-06-15 17:31:43 +03:00
2026-06-16 12:11:49 +03:00
2026-05-26 19:18:28 +03:00
2026-07-15 13:07:41 +03:00
2026-06-16 12:01:03 +03:00
2026-06-05 15:43:35 +03:00
2026-06-16 12:11:49 +03:00
2026-06-16 12:11:49 +03:00
2026-07-15 23:02:23 +03:00
2026-05-26 19:18:28 +03:00
2026-07-15 23:02:23 +03:00
2026-05-26 19:18:28 +03:00
2026-07-20 21:41:34 +03:00
2026-07-12 19:30:57 +03:00
2026-05-26 19:18:28 +03:00
2026-06-16 00:12:49 +03:00
2026-06-05 15:43:35 +03:00
2026-06-15 17:31:43 +03:00
2026-06-16 11:01:31 +03:00
2026-06-15 17:31:43 +03:00
2026-06-15 16:45:49 +03:00
2026-06-15 17:31:43 +03:00
2026-07-02 08:53:19 +03:00
2026-06-15 17:31:43 +03:00
2026-06-16 12:01:03 +03:00
2026-07-17 19:11:09 +03:00
2026-05-26 19:18:28 +03:00
2026-06-18 23:54:57 +03:00
2026-06-16 12:01:03 +03:00
2026-05-26 19:18:28 +03:00
2026-07-06 01:23:09 +03:00
2026-07-12 19:30:57 +03:00
2026-07-14 17:33:16 +03:00
2026-06-16 12:01:03 +03:00
2026-06-16 00:12:49 +03:00
2026-06-16 00:12:49 +03:00
2026-05-26 19:18:28 +03:00
2026-07-14 15:56:31 +03:00
2026-07-16 12:31:59 +03:00
2026-06-15 19:31:56 +03:00
2026-06-11 19:12:45 +03:00
2026-05-26 19:18:28 +03:00
2026-06-11 19:12:45 +03:00
2026-06-11 19:12:45 +03:00
2026-07-17 19:11:09 +03:00
2026-07-17 19:11:09 +03:00
2026-07-17 19:11:09 +03:00
2026-06-15 22:04:40 +03:00