- Binary-safe multipart parser (Buffer-based) - Structured JSON logging with daily rotation (7-day, 10MB) - Config hot-reload (5s TTL, mtime-based) - Request tracing: X-Request-ID, crypto.randomUUID() - Enhanced /health: uptime, voice config, stats, RouterAI probe - Graceful shutdown: SIGTERM/SIGINT with drain - Timeout 30s on all https.request calls - Body size limit 50MB - Replace url.parse() with WHATWG new URL() - Sanitized error responses - Modular handler architecture Reviewed by: kimi-k2.7-code, qwen3.6-plus, deepseek-v4-flash Spec by: Roko (architect) Rewrite by: kimi-k2.7-code via OpenCode
30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
# Changelog
|
|
|
|
## v3.0.0 (2026-07-08)
|
|
|
|
### Added
|
|
- Structured JSON logging with daily rotation (7-day retention, 10MB limit)
|
|
- Config hot-reload — reads openclaw.json every 5s, no restart needed
|
|
- Request tracing via `crypto.randomUUID()` and `X-Request-ID` header
|
|
- Health endpoint: uptime, current voice config, RouterAI connectivity probe, request stats
|
|
- Graceful shutdown on SIGTERM/SIGINT with in-flight request draining
|
|
- Upstream request timeout (30s) on all RouterAI calls
|
|
- Body size limit (50MB) to prevent DoS
|
|
|
|
### Fixed
|
|
- **CRITICAL:** Binary-safe multipart parser — no longer corrupts non-ASCII audio bytes
|
|
- Replace deprecated `url.parse()` with WHATWG `new URL()` API
|
|
- `response_format` removal now logged as WARN (was silently mutating)
|
|
- Whisper stderr captured and logged (was silently discarded)
|
|
- Error responses sanitized — no raw upstream errors leaked to client
|
|
- Root path (`/`) redirects to `/health` (was shadowing health endpoint)
|
|
|
|
### Changed
|
|
- Refactored into modular handler functions (`handleModels`, `handleSpeech`, `handleTranscriptions`, `handleHealth`)
|
|
- Config now has safe defaults; survives missing/broken `openclaw.json`
|
|
- `/v1/models` returns the configured TTS model from config, not hardcoded
|
|
- All file operations in `~/openclaw/logs/` directory
|
|
|
|
### Removed
|
|
- v2 monolithic request handler
|