commits on main
← newer commits2026-10-01
0199830b Aly Raffauf docs(context): report snapshot retention benchmarks
docs(context): report snapshot retention benchmarks
Record timing ranges and memory savings, including zero retained replay bytes and the 79 to 145 microsecond text-capture regression. Replay counting still serializes JSON, and inspection still renders the full history per page.
c203a010 Aly Raffauf test(context): cover payload release and benchmark snapshots
test(context): cover payload release and benchmark snapshots
Check payload release, replay delivery and session cleanup through real snapshots and daemon sessions. Offline runs measure capture, inspection and replacement with one warm-up and five samples.
ad123998 Aly Raffauf perf(context): drop omitted payloads from snapshot retention
perf(context): drop omitted payloads from snapshot retention
History retention drops from O(n + v + p) to O(n + v), with n entries/images, v visible bytes and p discarded payload bytes; capture complexity is unchanged. The 64 KiB replay fixture releases 62.5 MiB, while 1k-text capture shifts from 79 to 145 microseconds.
25b84fc5 Aly Raffauf test(tui): cover transcript buffer ownership
test(tui): cover transcript buffer ownership
Cover retained snapshots, detached history, discard, chunk boundaries, and message deduplication. The full repository gate and TUI race suite pass.
92cb518d Aly Raffauf perf(tui): assemble live chunks in amortized O(n)
perf(tui): assemble live chunks in amortized O(n)
Replace O(n²) copying per live chunk with amortized O(n) assembly, immutable snapshots, and detached history. For 256 KiB in 32-byte deltas, median assembly fell from 46.35 to 0.56 ms and allocated bytes from 288.83 to 1.43 MB (-benchmem -benchtime=300ms -count=3).
b0338715 Aly Raffauf perf(daemon): bound preview tail memory to O(1)
perf(daemon): bound preview tail memory to O(1)
Preview extraction stays O(n) time; extra space drops from O(n) to O(1), capped at 512 runes. Growth-sequence medians before -> after (-benchmem -benchtime=300ms -count=3): 16 KiB: 1.493 -> 0.307 ms, 273 -> 238 allocs, 838432 -> 180889 bytes 128 KiB: 157.109 -> 12.879 ms, 2178 -> 1830 allocs, 44233404 -> 9233466 bytes
acc7dbef Aly Raffauf test(daemon): cover streamed preview tails and benchmark argument growth
test(daemon): cover streamed preview tails and benchmark argument growth
Pin rune offsets and sanitized tails at partial JSON boundaries that E2E cannot reliably pause at. Benchmark complete 16/128 KiB growth sequences in 1 KiB steps.
75f8b534 Aly Raffauf test(python): cover trace lifetime and daemon persistence
test(python): cover trace lifetime and daemon persistence
Cover late tasks, nested delivery gates, failed writes, and traces surviving capture eviction.
b5ead43d Aly Raffauf fix(python): seal and release finalized traces
fix(python): seal and release finalized traces
Retained trace storage drops from O(B + A) to O(1), with B snapshot bytes and A activity bytes. Python 3.11 tracemalloc, 16 traces with sixteen 120 KiB files and 64 activities each: 30.3 MiB to 6.7 KiB after release.
5ae5e3d2 Aly Raffauf test(tui): check survivor ownership after trimming
test(tui): check survivor ownership after trimming
Cover row, byte, and complete eviction, including descriptor clearing and independent survivor storage.
3356236d Aly Raffauf perf(tui): reduce survivor allocations to O(1)
perf(tui): reduce survivor allocations to O(1)
Copying survivors drops from O(n + B) to O(n), where n is surviving rows and B is their text bytes. Three 300ms benchmark runs cut row-cap allocations/op from 1,002 to 2 and bytes/op from 136,960 to 40,960; byte-cap allocations/op fell from 510 to 2 and bytes/op from about 314,369 to 21,760.
4b3d439c Aly Raffauf test(tui): benchmark trimming a full display
test(tui): benchmark trimming a full display
Measure append-and-trim allocations at the row and byte caps, with rendering outside the timer.
8928450c Aly Raffauf perf(python): release delivered cell images
perf(python): release delivered cell images
Delivered-image archive space drops from O(R * B) to zero for R retained cells and B image bytes per cell; delivery remains O(B). Across three runs of 24 fresh 512x512 PNG cells, post-GC Python allocations fell from 12.03 MiB to 18.7 KiB, with zero archived image bytes and identical payloads.
8339043a Aly Raffauf fix(test): read complete owner frames without buffering
fix(test): read complete owner frames without buffering
Keep frames visible to select and read each payload fully, including large image results.
6c003b5d Aly Raffauf fix(python): release obsolete job output watchers
fix(python): release obsolete job output watchers
Use weak callbacks and clear obsolete watchers while preserving early-read notifications and retention limits. Benchmark: retained memory falls 73%, from 5.02 to 1.35 MiB after 256 jobs.
48eabe56 nekomimi.pet make bursts clickable to see what agent did
make bursts clickable to see what agent did
708c1b03 Aly Raffauf fix(python): validate protocol messages and remote settings
fix(python): validate protocol messages and remote settings
24e71780 Aly Raffauf fix(python): align tooling and Nix runtimes with Python 3.11
fix(python): align tooling and Nix runtimes with Python 3.11
77f1bc82 nekomimi.pet fix: preserve Python 3.11 compatibility in remote kernels
fix: preserve Python 3.11 compatibility in remote kernels
29ab4406 Aly Raffauf chore: remove audit cruft and exclude generated reports
chore: remove audit cruft and exclude generated reports
70774ed1 Aly Raffauf chore: remove lint audit CSVs
chore: remove lint audit CSVs
b5853135 Aly Raffauf refactor(gleam): clean up code and enforce focused lint checks
refactor(gleam): clean up code and enforce focused lint checks
4ad84fdc Aly Raffauf fix(python): enforce ruff and ty checks
fix(python): enforce ruff and ty checks
8209acaa Aly Raffauf fix(fmt): format test.sh
fix(fmt): format test.sh
83fc9148 Aly Raffauf refactor(cli): remove redundant daemon startup wrapper
refactor(cli): remove redundant daemon startup wrapper
db307c37 Aly Raffauf refactor(antigravity): move schema policy into Gleam
refactor(antigravity): move schema policy into Gleam
9f28af07 Aly Raffauf fix(daemon): return 503 when request actors disappear
fix(daemon): return 503 when request actors disappear
Restart regression passed three runs.
a6513292 Aly Raffauf perf(retrieval): page O(n) rows and retain O(k) results
perf(retrieval): page O(n) rows and retain O(k) results
Sparse search: 2 pages, 2 decodes. 2200 matches: 20 retained; count remains exact. Node page: 7 of 45 summaries read. Text page: 128 of 300 rows decoded.
61dad0e7 Aly Raffauf perf(lcm): cut below-trigger payload decodes from O(n) to O(1)
perf(lcm): cut below-trigger payload decodes from O(n) to O(1)
802-row fixture: 0 decodes below trigger or for stored prior. Forced compaction: 2 eligible rows decoded.
a670c29b Aly Raffauf perf(history): cut image fitting from O(n*f) to O(n log(f+1))
perf(history): cut image fitting from O(n*f) to O(n log(f+1))
Add indexed row classes and resumable backfill. Add snapshot-bounded source folds.
935f0b19 Aly Raffauf refactor(harness): remove unused projection and API wrappers
refactor(harness): remove unused projection and API wrappers
351b8df9 Aly Raffauf refactor(models): move provider cache schemas into Gleam
refactor(models): move provider cache schemas into Gleam
Keep Erlang adapters focused on transport, storage, and refresh coordination. Add parser, refresh, and picker regression coverage. Validated with gleam check, 170 Gleam tests, model-catalog E2E, and test.sh.
b467ef82 Aly Raffauf refactor(harness): move instruction policy into Gleam
refactor(harness): move instruction policy into Gleam
Move selection, precedence, and rendering into Gleam. Keep discovery and validated reads in Erlang, with E2E coverage for ordering and file selection.
7ba2cb0b Aly Raffauf perf(cache-ttl): make warm reads O(1) and globs O(p*v)
perf(cache-ttl): make warm reads O(1) and globs O(p*v)
Cache typed tables and failed revisions; reject duplicate layer IDs. 8,000-entry warm table: 34.4 ms -> 0.11 ms. 16-wildcard cold lookup: >2 s -> 13.4 ms.
9f29d5af Aly Raffauf perf(claude): cut required checks from O(r^2) to O(r log r)
perf(claude): cut required checks from O(r^2) to O(r log r)
Index branch requirements and skip overwritten fields. 800 names per branch: 46.8 ms -> 1.02 ms median normalization.
dd17f428 Aly Raffauf perf(models): replace O(p) provider scans with O(log p) lookups
perf(models): replace O(p) provider scans with O(log p) lookups
Return typed results and trust catalog efforts; infer only for absent models. Use direct provider lookup without an endpoint and remove unused wrappers.
ae878c51 Aly Raffauf perf(capabilities): cut preference reads from O(n) to O(1)
perf(capabilities): cut preference reads from O(n) to O(1)
Reuse one snapshot per selection and share the 1 MiB read/write cap. 128 checks on 198,914 bytes: 256.2 ms -> 2.8 ms.
6e605797 Aly Raffauf perf(cache-ttl): cut merging from O(n^2) to O(n log n)
perf(cache-ttl): cut merging from O(n^2) to O(n log n)
Move merge policy into Gleam and replace repeated list scans with an ID index. Preserve ordering and override behavior; file I/O and caching stay in Erlang. Three 8,000-entry layers: 7,329 ms in the original Erlang merge, 14 ms now. Median of three runs, merge only. Parity checks and test.sh pass.
506b634e Aly Raffauf refactor(models): move catalog selection into Gleam
refactor(models): move catalog selection into Gleam
Provider matching and conservative fallback limits are application policy. Move selection into catalog.gleam while keeping fetching, caching, and index persistence in Erlang. Preserve the JSON contract, persisted index format, and existing selection behavior. Replace duplicate unit tests with daemon coverage for shared capabilities, endpoint matching, and restart persistence. Verified 11,260 old/new selection and listing comparisons and the full test.sh gate.
4d41fe57 Aly Raffauf refactor(claude): move schema normalization into Gleam
refactor(claude): move schema normalization into Gleam
Claude schema normalization is pure provider policy, so it belongs beside the request encoder. Move the merge rules into schema.gleam and remove the Erlang module. Keep arbitrary schema metadata and nested schemas intact. Add a request regression test for property precedence, required fields, and descriptions. Verified 1,009 cases against the old normalizer, 159 Gleam tests, and the full test.sh gate.
cfbde4bd Aly Raffauf refactor(capabilities): move preference rules into Gleam
refactor(capabilities): move preference rules into Gleam
Use typed decoding for overrides and validation while Erlang retains file persistence.
8d2c14de Aly Raffauf refactor(cli): share login state cleanup
refactor(cli): share login state cleanup
Delete the temporary provider before restoring the saved config. Report cleanup errors and attempt restoration even when deletion fails.
336310f2 Aly Raffauf chore(cli): drop unused snapshot cursor
chore(cli): drop unused snapshot cursor
The stream snapshot helper only reads events. Remove the unused cursor field from its response struct.
2d22f905 Aly Raffauf refactor(cli): share open mode classification
refactor(cli): share open mode classification
Use one helper to classify file modes for Python open calls and Path.open calls.
e1bfeeb7 Aly Raffauf fix(cli): preserve cache fade in usage events
fix(cli): preserve cache fade in usage events
Decode cache fade steps so the footer can age cached token counts. Ignore malformed fade data while keeping the rest of the usage event.
7de30f74 dawn extensions: add cdp browser tool
extensions: add cdp browser tool
Signed-off-by: dawn <90008@klbr.net>
647eb43e dawn remote: run commands under login shell, discover agent socket, and raise timeouts
remote: run commands under login shell, discover agent socket, and raise timeouts
Signed-off-by: dawn <90008@klbr.net>
963a4a76 dawn python: block daemon tokens and secret-shaped variables in clean_environment
python: block daemon tokens and secret-shaped variables in clean_environment
Signed-off-by: dawn <90008@klbr.net>
9c745c52 Aly Raffauf fix(tui): report terminal restoration failures during color detection
fix(tui): report terminal restoration failures during color detection
Stop TUI startup if restoring terminal settings fails, while keeping default colors for ordinary query failures.