Skip to content

v1.3.132

Choose a tag to compare

@topcheer topcheer released this 05 Jul 23:47
· 3967 commits to main since this release

v1.3.132

Agent Intelligence Improvements

  • Progressive error-streak guidance — When the agent hits consecutive tool errors, guidance now escalates across 3 levels (4, 7, 10 errors) instead of firing once. Level 1 suggests reconsidering strategy, level 2 focuses on technical debugging, level 3 recommends escalation. (SICA-inspired)

  • Reactive ratchet rule matching — When a tool result contains an error matching an existing ratchet rule's pattern, the FixHint is now injected immediately. Previously, ratchet rules only matched tool arguments (preventive), not tool result content (reactive).

  • Smart verify hint reset — The post-edit verify hint counter now resets when the agent proactively runs a build/test command, avoiding redundant "run go build" reminders. Hint messages are also context-aware: if the last build failed, the hint adds urgency.

  • Justfile and Taskfile support — The verify hint build detection now recognizes Justfile and Taskfile.yml projects, suggesting just verify-ci or task build instead of falling through to language-specific defaults.

Bug Fixes

  • Fix: nil slice panic in LAN chat autocomplete — Typing @query in chat mode when no LAN chat participants are online would panic with "slice bounds out of range". The filtering loop now guards against nil slices.

  • Fix: concurrent WebSocket readers in WebUI — The legacy chat WebSocket handler could spawn a second concurrent reader on the same connection, violating gorilla/websocket's contract and risking panics or corrupted reads. The readPump goroutine is now properly drained before the outer loop resumes.

  • Fix: nil dereference on late IM ask_user reply — When an IM reply for an ask_user questionnaire arrived after the questionnaire was already completed, the nil pointer dereference would crash.

  • Fix: lock-before-close in mattermost, wecom, and nostr adapters — Three IM adapters called ws.Close() while holding a write lock, causing potential deadlock. The lock is now released before closing.