From 33b2688a2d2888bf5e560c70a5bd92a319f5288d Mon Sep 17 00:00:00 2001 From: david Date: Tue, 8 Sep 2026 00:36:22 -0300 Subject: all of this was vibecoded. i just asked claude to fix all my bugs and he actually overhauled shit woaw. he only changed the name and position of a couple functions so if i want to write more things it should be fine. i love claude i love antrhopic i love vibecoding @claude make me a million dollars in a day make no mistake --- utils.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 utils.py (limited to 'utils.py') diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..aea653b --- /dev/null +++ b/utils.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +from pathlib import Path +from datetime import datetime + + +def now_str() -> str: + return datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + +def nots(line: str) -> str: + if line.startswith("[") and "]" in line: + return line.split("]", 1)[1].lstrip() + return line + + +def tail_lines(path: Path, n: int) -> list[str]: + # grabs the last n lines without reading the whole file into memory first, + # since memory.txt only ever grows and reading it fully every message doesn't scale + if n <= 0: + return [] + avg_line_bytes = 200 + with path.open("rb") as f: + f.seek(0, 2) + file_size = f.tell() + if file_size == 0: + return [] + block_size = n * avg_line_bytes + data = b"" + lines = [] + while True: + seek_pos = max(file_size - block_size, 0) + f.seek(seek_pos) + data = f.read(file_size - seek_pos) + lines = data.splitlines() + if len(lines) > n or seek_pos == 0: + break + block_size *= 2 + return [l.decode("utf-8", errors="ignore").strip() for l in lines[-n:] if l.strip()] -- cgit v1.3-2-g0d8e