Skip to content

Releases: ginkida/mindsecretary

v0.6.0

15 Apr 17:34

Choose a tag to compare

What's New

New Telegram Commands

  • /goals — today's daily goals with status and completion count
  • /habits — habit streaks (consecutive days) and 7-day completion rate
  • /search <query> — direct semantic memory search with scores
  • /undo — restore the last deleted memory
  • /export — export all data as JSON file to Telegram

Features

  • Recurring reminders — daily/weekly/monthly recurrence, auto-creates next on send
  • Memory deduplication — cosine similarity >0.92 in same category bumps importance instead of duplicating
  • Memory recency decay — old untouched memories rank lower in search (exponential, 90-day half-life)
  • Contact alias matching — upsert_contact checks aliases field before creating duplicates
  • English mood signals — 39 English keywords for bilingual sentiment analysis
  • Learning dedup — weekly reflection checks similarity before saving learnings
  • 📌 Pin button — pin important bot replies directly in chat
  • Notification awareness — shows count in /start, warns when approaching daily limit
  • /stats breakdown — per-provider cost and 7-day trend
  • /forget confirmation — inline buttons before deleting, /undo to restore

Bug Fixes

  • Fix timestamp format in contacts/decisions/reminders (isoformat()strftime for SQLite compat)
  • Fix memory search Row object unpacking (dead isinstance check)
  • Fix silent exception handling in evening weather fetch
  • Fix _reply_map unbounded growth (cap at 200)
  • Fix Docker healthcheck that always passed (now checks process + DB)
  • Fix Markdown parse errors in Telegram replies (escape orphan *, _, `)

Performance

  • Vectorized memory search: numpy matrix multiply + argpartition for O(n) top-k
  • Database indexes: contacts(name), interactions(timestamp, message_type, direction)

Reliability

  • Timezone-aware datetime via tz_now(profile.timezone) throughout
  • Graceful degradation when Voyage API fails (zero-vector fallback)
  • STT retry: 3 attempts with exponential backoff on Groq failures
  • Datetime validation in tool arguments (normalize to SQL format)
  • Smart questions rate limit persisted in DB (survives restarts)
  • Brain section failures logged at WARNING (not silently swallowed)
  • Briefing fallback messages explain why briefing is unavailable

Infrastructure

  • 105 tests (from zero): database, brain, tools, scheduler, mood, integration, telegram, habits, datetime
  • CI: GitHub Actions runs pytest on Python 3.10/3.11/3.12
  • core/enums.py: Status, Priority, Sentiment, Feedback, MoodLabel
  • scripts/reembed.py: batch re-embed zero-vector memories
  • Configurable tuning section in settings.yaml (6 parameters)

Full Stats

  • 9 commits, ~45 improvements
  • 11 Telegram commands (was 6), 13 LLM tools (was 10)
  • 105 tests (was 0)

v0.3.0 — Daily goals

13 Apr 07:10

Choose a tag to compare

MindSecretary v0.3.0

New: Daily goals

Set goals in the morning, track throughout the day, review together in the evening.

Morning:

  • Briefing ends with "Какие цели на сегодня?"
  • Reply naturally → bot calls set_daily_goal for each

During the day:

  • Goals visible in every conversation (⬜ pending, ✅ done, ⏭ skipped, 🟡 partial)
  • "Закончил отчёт" → bot marks it completed
  • "В зал не пошёл, спина болит" → marked skipped with reflection

Evening:

  • Summary reviews each goal: completed → noted, pending → gently asks what happened
  • Warm tone, not audit

Tools

2 new tools (13 total):

  • set_daily_goal — create a goal for today (title, priority, description)
  • complete_daily_goal — mark by keyword hint (completed/skipped/partial + reflection)

Fixes since v0.2.0

  • Sanitize goal data before prompt injection in evening summary
  • Translate resolve_decision tool description to Russian (was the only English one)
  • Bump evening prompt max_tokens 600 → 800

Deploy

docker compose pull && docker compose up -d

Image: ghcr.io/ginkida/mindsecretary:0.3.0

v0.2.0 — Companion mode

11 Apr 13:28

Choose a tag to compare

MindSecretary v0.2.0

Transforms the bot from a pure task extractor into a warm personal companion that can both handle secretary duties AND emotional conversations.

New: Companion mode

  • Character-driven prompt — bot reads emotional tone, responds with specificity, not clichés
  • Dual mode — business-as-default, emotional branch when message tone calls for it. Background mood never reinterprets neutral messages.
  • Voice rules — banned therapy-speak patterns ("слышу тебя", "звучит здорово", "стоит", "должен") with positive substitution examples
  • Honest pushback — bot can gently disagree on facts and plans (never on feelings)
  • Memory continuity — references past events naturally when relevant, not shoehorned
  • New "emotional" memory category for tracking feelings separately from tasks

New: Enriched context in system prompt

  • Theme clusters (grouped by person/category over last 30 days)
  • Drifting relationships (top 2 contacts gone quiet)
  • Upcoming birthdays in the daily context
  • 8 recent messages (up from 6)

New: resolve_decision LLM tool

Bot can now close tracked decisions when you mention outcomes. Pending decisions surface in the system prompt so Claude sees them.

Fixes

  • Critical timestamp bug — SQL space-separated timestamps vs Python T-separated isoformat caused silent string-comparison failures in mood_trend, feedback summaries, and any get_interactions filter. Broken since day one.
  • final_text overwrite in tool-use loop — warm responses were getting erased by later tool-call round confirmations
  • max_tokens 1024 → 1500 to prevent mid-sentence truncation on Russian warm replies
  • Defensive None checks in resolve_decision and _escape_like
  • Previous: proactive notification limits, quiet hours, decision follow-up repeat, birthday dedup, settings toggles (from v0.1.x hardening)

Deploy

```bash
mkdir mindsecretary && cd mindsecretary

curl -LO https://raw.githubusercontent.com/ginkida/mindsecretary/v0.2.0/.env.example
curl -LO https://raw.githubusercontent.com/ginkida/mindsecretary/v0.2.0/docker-compose.yaml
mkdir -p config
curl -Lo config/profile.yaml https://raw.githubusercontent.com/ginkida/mindsecretary/v0.2.0/config/profile.yaml
curl -Lo config/settings.yaml https://raw.githubusercontent.com/ginkida/mindsecretary/v0.2.0/config/settings.yaml

cp .env.example .env

Edit .env — fill in API keys

docker compose pull
docker compose up -d
```

Image: `ghcr.io/ginkida/mindsecretary:0.2.0`

v0.1.0

10 Apr 13:52

Choose a tag to compare

MindSecretary v0.1.0

Voice-first personal AI secretary as a Telegram bot.

Deploy

mkdir mindsecretary && cd mindsecretary

# Download configs
curl -LO https://raw.githubusercontent.com/ginkida/mindsecretary/v0.1.0/.env.example
curl -LO https://raw.githubusercontent.com/ginkida/mindsecretary/v0.1.0/docker-compose.yaml
mkdir -p config
curl -Lo config/profile.yaml https://raw.githubusercontent.com/ginkida/mindsecretary/v0.1.0/config/profile.yaml
curl -Lo config/settings.yaml https://raw.githubusercontent.com/ginkida/mindsecretary/v0.1.0/config/settings.yaml

# Configure and run
cp .env.example .env
# Edit .env — fill in API keys
docker compose up -d

What's included

  • Voice, text, photo, forward message processing
  • Semantic memory (Voyage AI + SQLite)
  • Personal CRM with contact tracking
  • Calendar, reminders, habit tracking
  • Decision tracker with follow-ups
  • Auto-diary with mood analysis
  • Morning briefing, evening summary, weekly review
  • Smart midday questions
  • Weather and birthday alerts
  • Feedback loop (thumbs up/down)