Virgil
2ad4870bd0
fix(ratelimit): initialise state on invalid decides
...
Security Scan / security (push) Successful in 8s
Test / test (push) Failing after 14m39s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 04:47:30 +00:00
Virgil
ed5949ec3a
feat(ratelimit): add agent decision guidance
...
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 2m19s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-30 08:16:44 +00:00
Virgil
1ec0ea4d28
fix(ratelimit): align module metadata and repo guidance
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-27 04:23:34 +00:00
Virgil
ed1cdc11b2
refactor(ratelimit): finish ax v0.8.0 polish
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-26 18:51:54 +00:00
Virgil
d1c90b937d
fix(ratelimit): harden audit edge cases
...
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-23 07:26:15 +00:00
Snider
79448bf3f3
fix: improve error handling and test coverage
...
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 08:30:03 +00:00
Snider
ade9766d65
fix: skip permission tests when running as root (CI/Docker)
...
Security Scan / security (push) Successful in 15s
Test / test (push) Successful in 3m16s
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 07:04:58 +00:00
Snider
d74811f2d0
feat: modernise to Go 1.26 — slices.DeleteFunc, iterators, range
...
Security Scan / security (push) Successful in 7s
Test / test (push) Failing after 40s
- Use slices.DeleteFunc in prune() for cleaner time-window filtering
- Add Models() iter.Seq[string] and Iter() iter.Seq2[string, ModelStats]
- Use range over int in benchmarks and tests
- Update docs example to modern range syntax
Co-Authored-By: Gemini <noreply@google.com>
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 05:14:19 +00:00
Snider
2246fea10f
refactor: apply go fix modernizers for Go 1.26
...
Automated fixes: interface{} → any, range-over-int, t.Context(),
wg.Go(), strings.SplitSeq, strings.Builder, slices.Contains,
maps helpers, min/max builtins.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-22 21:00:17 +00:00
Snider
db958f293a
test: expand race coverage and benchmarks
...
Add 4 concurrent race tests: multi-model (5 models), Persist+Load
filesystem race, AllStats+RecordUsage, WaitForCapacity+RecordUsage.
Add 4 benchmarks: CanSendWithPrune, Stats, AllStats, Persist.
Total: 80 tests, 7 benchmarks, all pass under go test -race.
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 04:30:54 +00:00
Claude
3c63b1022a
feat(ratelimit): generalise beyond Gemini with provider profiles and push coverage to 95%
...
Phase 0: Rewrite test suite with testify (77.1% -> 95.1% coverage).
Add boundary tests, concurrent access tests, benchmarks, error path
coverage for Load/Persist, Reset, Stats, and CountTokens.
Phase 1: Extract hardcoded Gemini quotas into provider-agnostic config.
Add Provider type, DefaultProfiles(), NewWithConfig(), SetQuota(), and
AddProvider(). Pre-configured profiles for Gemini, OpenAI, Anthropic,
and Local. New() retains exact backward compatibility via delegation.
Co-Authored-By: Charon <developers@lethean.io>
2026-02-20 01:07:57 +00:00
Snider
fa1a6fc030
feat: extract go-ratelimit from core/go pkg/ratelimit
...
Token counting, model quotas, sliding window rate limiter.
Zero external dependencies (stdlib only).
Module: forge.lthn.ai/core/go-ratelimit
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-19 16:09:13 +00:00