v0.8.1 — « Honesty » (patch release, no new features)
Patch release tracking the v0.8.0 audit.
🔒 Security
- Console binds 127.0.0.1 by default, --bind flag now honored
- Clean refusal when port is already taken, --bind validation
🐛 Fixed — Tool execution (the DeepSeek bug)
- Multi tool calls no longer overwrite the first call
- Tool calls drained on finish_reason: stop instead of discarded
- Ollama native queries /api/show for live capabilities and context size
🐛 Fixed — Markup recovery
- 4 new formats recovered: JSON fences, [TOOL_CALL], DeepSeek native tags, function.arguments JSON
- Fallback parser respects string="true", no longer trims values
- Markup detection requires both open AND close structure
✅ Fixed — Approvals
- Non-interactive mode refuses cleanly instead of blocking on stdin
- Approval card uses human language via humanize_tool_action
- Web approval broker expires after hard timeout, returns deny
- WaitingForApproval status visible in cockpit
🇫🇷 Fixed — Tool calling
- French anti-narration guard: detects « je vais créer… », « laisse-moi vérifier… »
- System prompts modulated by tier (trivial/small use lean prompt)
- Curator no longer creates skills from UI status text
- History filtered at serialization: no UI status lines re-injected
📊 Fixed — Numbers
- Real provider usage replaces estimates instead of adding to them
- duration_ms in OutcomeSummary, replay uses stored duration
- DeepSeek models receive non-zero pricing, re-enabling cost comparisons
- CLI only prints 'Done.' for completed runs
🎭 Fixed — Noise
- Router message is now a single clear line instead of franglais duplicate
- Verifier lane no longer falsely shows 'run closed' without verification
- Favicon inline, no more 404 on every page load
- reasoning_content captured from single source, preventing doubled context