Releases: BackendStack21/odek
v0.58.8 — Archive sessions on /new, fix deepsearch test
Features
- archive sessions on /new instead of deleting + fix deepsearch test
Documentation
- reverse CHANGELOG order to newest-first
- regenerate full CHANGELOG.md from git history via generate-changelog.sh
- deprecate manual changelog edits — point to generate-changelog.sh
Infrastructure
- add generate-changelog.sh — conventional-commit changelog generator
Full Changelog: v0.58.7...v0.58.8
v0.58.7 — Dynamic release badge on landing page
Changes
🌐 Landing Page
- Replaced the hardcoded
v0.48.0version badge in the hero section with a dynamic Shields.io badge linked to GitHub Releases - Zero JavaScript — the badge auto-updates via CDN-cached metadata from the latest release tag
- Clicking the badge now takes you straight to the releases page
Full Changelog: v0.58.6...v0.58.7
v0.58.6 — session recall edge-case tests
Tests
6 new edge-case tests for the session recall pipeline
TestSessionSearch_DeepSearchTwoTokens — Verifies the v0.58.4 fix: a session where only "changes" appears in message content does NOT match query "go-vector changes". A session with both "go-vector" AND "changes" DOES match. Prevents the false positive that plagued the events fetcher analysis session.
TestSessionSearch_GetReturnsSessionMessages — Verifies the v0.58.3 fix: get returns the full session_messages array with correct role and content for every user/assistant message. System messages are excluded.
TestSessionSearch_PreSavePersistence — Verifies the v0.58.5 fix: a session saved to the Store is immediately findable by session_search. This simulates the pre-agent-loop save that ensures the current turn's data is visible to search tools inside the ReAct loop.
TestSessionSearch_DeepSearchEdgeCases — Three sub-tests:
- Empty messages don't cause panics
- System-only messages are excluded from deepSearch matching
- Unicode content with two matching tokens works correctly
Full Changelog: v0.58.5...v0.58.6
v0.58.5 — save user message before agent loop
Fixes
Telegram bot: save user message before agent loop
session_search inside the agent loop could never find the current turn's data. The user message was appended to an in-memory slice (line 998 of telegram.go) but only persisted to disk AFTER RunWithMessages completed (line 1534).
The entire ReAct loop ran with the current turn's messages invisible to both:
- Vector search (Phase 1) — the index didn't have the current content
- Deep search (Phase 2) —
Store.Load()read a stale file from disk
Now the user message is saved to the Store immediately after being appended, using a direct Store.Save() call that bypasses the TurnCount increment. The normal end-of-turn save at line 1534 still runs and overwrites with the final state (including tool results and bot responses).
This ensures that any session_search call inside the agent loop can find the current turn's conversation content on disk and in the vector index.
Full Changelog: v0.58.4...v0.58.5
v0.58.4 — deepSearch requires 2+ distinct token matches
Fixes
session_search no longer matches on a single common word
Query "go-vector changes" was matching the events fetcher analysis session because "changes" appeared once in a message like "Events changed: +8 -8 = 10 total". deepSearch accepted any single token match across 100+ messages.
Now deepSearch tracks distinct matched tokens and requires at least 2 (or all for single-token queries). A single common word like "changes", "release", or "update" can no longer qualify an unrelated session.
Tool description updated
Added guidance telling the LLM to use get after search to read the actual conversation content. In v0.58.3, get was updated to return full session_messages but the LLM didn't know to use it.
Full Changelog: v0.58.3...v0.58.4
v0.58.3 — session message content + recursive glob
Fixes
session_search get now returns actual message content
Previously get only returned message count + buffer summaries. The LLM couldn't read what was actually said in past sessions — it only saw 2-line buffer snippets. Now session_messages includes every user and assistant message with role + content, so the bot can directly read and understand past conversations.
glob tool now supports ** recursive patterns
Go's filepath.Match and filepath.Glob don't support ** (globstar) — they treat ** as literal * characters. When the bot called glob {"pattern":"**/*.json","path":"..."}, it got {"matches":null} every time. The pattern **/*.json was silently failing because filepath.Match("**/*.json", path) never matches anything.
Now ** patterns are detected and converted to equivalent regex (e.g. **/*.json -> ^.*/[^/]*\.json$), so recursive globs actually work.
Full Changelog: v0.58.2...v0.58.3
v0.58.2 — stale vector cleanup on prune
Fixes
/prune no longer leaves orphaned vectors
Store.Cleanup() primary path (with index) bypassed Store.Delete() and directly removed session files + index entries — but never called Vec.Remove(). Every /prune command left stale vectors in vectors.gob.
The fallback path (no index) was correct — it used Store.Delete() which includes Vec.Remove().
Now the index-based path also calls Vec.Remove(id) alongside file removal.
Impact: No data corruption (stale vectors are skipped during search since Load() returns nil for deleted files, and the threshold filter vr.Score < 0.40 drops them). But the store accumulated uncompacted garbage that would never be cleaned up.
Full Changelog: v0.58.1...v0.58.2
v0.58.1 — session_search false-positive fix
Fixes
session_search no longer returns garbage results
Problem: Two bugs caused handleSearch to return "say hello" sessions as false positives:
-
Vector score threshold too low (0.05): Random Projections (bag-of-words) matches generic tech queries against "say hello" sessions at 0.30-0.36. Querying "odek project molty agent skill" returned irrelevant hello sessions with scores above the old threshold.
-
Deep search pool too narrow (20 sessions): Keyword fallback only searched the 20 most recent sessions. With 115+ "say hello" heartbeat tests occupying the recent list, substantive older sessions were never reached.
Fix:
- Raised vector score threshold to 0.40 — only strong matches pass Phase 1
- Changed deep search to List(0) — scans ALL sessions, not just the 20 most recent
Full Changelog: v0.58.0...v0.58.1
v0.58.0
Full Changelog: v0.57.0...v0.58.0
v0.57.0
Full Changelog: v0.56.2...v0.57.0