  
|
0a30c95ee1
|
Feat: add rate limiting for built-in tools (closes #171) (#276)
* feat: add rate limiting for built-in tools (closes #171)
Extend the Tool trait with an optional rate_limit_config() method and
wire a shared sliding-window RateLimiter into the tool execution path in
worker.rs so that per-tool per-user limits are enforced at runtime.
- Add ToolRateLimitConfig struct (requests_per_minute / requests_per_hour)
and rate_limit_config() default method to the Tool trait
- Extract shared RateLimiter from tools/wasm/ into tools/rate_limiter.rs;
WASM rate_limiter.rs now re-exports from the shared module
- Add RateLimited error variant to crate::error::ToolError
- Register RateLimiter on ToolRegistry and check limits in execute_tool_inner
- Apply conservative configs to high-impact tools:
ShellTool 30 rpm / 300 rph
HttpTool 30 rpm / 500 rph
WriteFileTool 20 rpm / 200 rph
ApplyPatchTool 20 rpm / 200 rph
MemoryWriteTool 20 rpm / 200 rph
CreateJobTool 5 rpm / 30 rph
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
* refactor: address Gemini review comments on rate limiter
- worker.rs: collapse nested if-let into a single `if let ... && let ...`
(clippy::collapsible_if)
- rate_limiter.rs: extract check_internal(record: bool) helper to DRY up
check_and_record / check (were identical except for the increment step)
- rate_limiter.rs: replace magic numbers 60 / 3600 with MINUTE_SECS /
HOUR_SECS constants
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
---------
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Co-authored-by: firat.sertgoz <[email protected]>
|
2026-02-21 14:39:53 +04:00 |
|