feat: v0.6.0 — collapse policy, session limiter, Claude Code provider, prune, browser auth, media downloads
This commit is contained in:
@@ -23,11 +23,20 @@ class LossReport:
|
||||
unknown_blocks: Counter = field(default_factory=Counter)
|
||||
extraction_failures: Counter = field(default_factory=Counter)
|
||||
filtered_roles: Counter = field(default_factory=Counter)
|
||||
# Messages collapsed/omitted by the EXPORTER_HIDDEN_CONTENT policy —
|
||||
# intentional, but still surfaced so the omission is never invisible.
|
||||
collapsed: Counter = field(default_factory=Counter)
|
||||
collapsed_bytes: int = 0
|
||||
|
||||
# Aggregate counters
|
||||
messages_rendered: int = 0
|
||||
conversations: int = 0
|
||||
|
||||
# Media downloads (EXPORTER_DOWNLOAD_MEDIA): successes / skips / failures
|
||||
media_downloaded: int = 0
|
||||
media_downloaded_bytes: int = 0
|
||||
media_failed: Counter = field(default_factory=Counter)
|
||||
|
||||
# Recording -------------------------------------------------------------
|
||||
|
||||
def record_unknown(self, raw_type: str) -> None:
|
||||
@@ -39,6 +48,19 @@ class LossReport:
|
||||
def record_filtered_role(self, role: str) -> None:
|
||||
self.filtered_roles[role or "?"] += 1
|
||||
|
||||
def record_collapsed(self, origin: str, size_bytes: int = 0) -> None:
|
||||
self.collapsed[origin or "?"] += 1
|
||||
if isinstance(size_bytes, int) and size_bytes > 0:
|
||||
self.collapsed_bytes += size_bytes
|
||||
|
||||
def record_media_downloaded(self, size_bytes: int = 0) -> None:
|
||||
self.media_downloaded += 1
|
||||
if isinstance(size_bytes, int) and size_bytes > 0:
|
||||
self.media_downloaded_bytes += size_bytes
|
||||
|
||||
def record_media_failed(self, reason: str) -> None:
|
||||
self.media_failed[reason or "?"] += 1
|
||||
|
||||
def record_message(self) -> None:
|
||||
self.messages_rendered += 1
|
||||
|
||||
@@ -58,6 +80,22 @@ class LossReport:
|
||||
lines.append(f" messages rendered: {self.messages_rendered}")
|
||||
lines.extend(_format_section("unknown blocks: ", self.unknown_blocks))
|
||||
lines.extend(_format_section("extraction failures: ", self.extraction_failures))
|
||||
lines.extend(_format_section("collapsed by policy: ", self.collapsed))
|
||||
if self.collapsed:
|
||||
lines.append(
|
||||
f" ≈{self.collapsed_bytes / 1024:.0f} KB omitted "
|
||||
"(intentional — EXPORTER_HIDDEN_CONTENT=full to keep)"
|
||||
)
|
||||
if self.media_downloaded or self.media_failed:
|
||||
lines.append(
|
||||
f" media downloaded: {self.media_downloaded} "
|
||||
f"(≈{self.media_downloaded_bytes / 1024:.0f} KB)"
|
||||
)
|
||||
if self.media_failed:
|
||||
total_failed = sum(self.media_failed.values())
|
||||
lines.append(f" media failed: {total_failed}")
|
||||
for reason, count in self.media_failed.most_common(_TOP_N_BREAKDOWN):
|
||||
lines.append(f" {reason}={count}")
|
||||
lines.append(
|
||||
" filtered roles: "
|
||||
"(filter lifted in v0.4.0 — counter retained for future use, expected 0)"
|
||||
|
||||
Reference in New Issue
Block a user