Skip to content

Aegis AI v0.5

Choose a tag to compare

@hieulouisdev hieulouisdev released this 17 Aug 12:00
· 29 commits to main since this release

Aegis AI v0.5 — Phase 3.1 / 3.2 / 3.3

Voice I/O, Vector-embedding RAG, and CalDAV calendar integration.

Closes Phase 3.1 (calendar), Phase 3.2 (voice I/O), and Phase 3.3 (RAG foundation). Adds the last missing features needed to make Aegis AI a proactive daily-driver assistant.


Highlights

Voice I/O (src/voice/)

  • Speech-to-Text via cloud OpenAI Whisper (/v1/audio/transcriptions, multipart/form-data). Compatible with OpenAI itself, Azure OpenAI Whisper deployments, Groq's distil-whisper-large-v3-en, and any OpenAI-compatible gateway.

    • API key from the OS keychain entry aegis-ai/voice_stt (set via Settings) or OPENAI_API_KEY / AEGIS_STT_API_KEY env vars.
    • LocalStt fallback stub returns an empty transcript when no API key is configured.
    • Wake-word detector: case-insensitive substring match for "hey aegis" (override via AEGIS_WAKE_WORD).
  • Text-to-Speech via OS-native engines:

    • Linux: espeak / espeak-ng (writes a WAV file).
    • Windows: PowerShell + System.Speech.Synthesis.SpeechSynthesizer (SAPI, ships with the OS — no install required).
    • macOS: say (writes an AIFF file).
    • Optional ElevenLabs cloud TTS (opt-in, API key from keychain aegis-ai/voice_tts or ELEVENLABS_API_KEY).
    • Default backend is auto-selected (cloud if a key is configured, otherwise local).
  • Push-to-talk hotkey — system-wide hotkey (default Ctrl+Space) registered via tauri-plugin-global-shortcut.

    • Toggle semantics: first press starts recording, second press stops and sends.
    • Configurable via the voice_ptt_set_hotkey Tauri command.
  • New Tauri commands: voice_transcribe, voice_speak, voice_ptt_state, voice_ptt_set_hotkey.

Vector-embedding RAG (src/memory/embeddings.rs, src/memory/rag.rs)

  • EmbeddingStore — SQLite-backed vector store for retrieval-augmented generation.

    • 256-dim sparse vector per knowledge entry, hashed via character-trigram FNV-1a.
    • Cosine similarity retrieval — handles typos and morphological variants better than v0.4's Jaccard baseline ("calendar" vs "calender" scores > 0.5).
    • Compact storage: 1 KB per entry; 10k entries x 1 KB = 10 MB fits comfortably in SQLite.
    • New knowledge_embeddings table; migrated automatically on boot.
    • Pre-v0.5 facts are backfilled on first boot via EmbeddingStore::backfill().
  • MemoryStore::remember / forget — high-level helpers that update both the knowledge table and its embedding in one call.

  • memory::rag::inject_default — pulls the top-5 most similar knowledge entries (min cosine score 0.30) and prepends a system-prompt fragment.

    • Wired into ai_chat, ai_chat_stream, and the agent loop's agent_loop_inner.
    • No-op if the knowledge base is empty.
    • Asking "what's my dog's name?" just works if you've ever told the AI your dog's name.

CalDAV Calendar Integration (src/calendar/)

  • CalendarClient — minimal read-only CalDAV client:

    • PROPFIND on the calendar home URL to discover calendar collections.
    • REPORT with a calendar-query body to fetch VEVENTs whose DTSTART falls inside today's window.
    • Custom line-based iCalendar parser: RFC 5545 line folding, parameter escaping, all common VEVENT fields (UID, SUMMARY, DESCRIPTION, LOCATION, DTSTART, DTEND, VALUE=DATE for all-day events).
    • Tested against Nextcloud, Radicale, Synology Calendar (best-effort).
  • Intent classifier — recognizes three calendar intents:

    • ListToday — "What's on my calendar today?" / "Show me my agenda"
    • ListTomorrow — "Do I have anything tomorrow?"
    • ScheduleMeeting — "Schedule a meeting with Bob at 3pm" — surfaces today's events so the AI can detect conflicts. v0.5 does NOT auto-create events; the user must confirm via the UI.
  • New Tauri commands: calendar_list_today, calendar_configure, calendar_dispatch_intent.

Release Pipeline (new GitHub Action)

  • Replaced the old release.yml (which ran on every push and PR) with a new workflow that only triggers when a release is published.
  • Builds for Windows (x86_64-pc-windows-msvc) and Linux (x86_64-unknown-linux-gnu) in parallel.
  • Pins Rust 1.97.1 via dtolnay/rust-toolchain@stable (matches rust-toolchain.toml).
  • Builds frontend (npm ci && npm run build) + the Tauri bundle (tauri-apps/tauri-action@v0) for both targets.
  • Uploads .msi, .exe (NSIS), .deb, .AppImage, and SHA-256 checksums to the release as assets.

Branch Protection on main

  • main is now protected: only the repo owner (hieulouisdev) can push directly.
  • All other contributors must open a pull request from a feature branch or a fork.
  • Admins (the owner + PAT holders acting on their behalf) bypass the PR requirement.
  • Force pushes and branch deletion are blocked.

Version Bumps

File Old New
Cargo.toml (workspace) 0.4.0 0.5.0
src-tauri/Cargo.toml (inherits) (inherits)
src-tauri/tauri.conf.json 0.4.0 0.5.0
package.json 0.4.0 0.5.0
Cargo.lock 0.4.0 0.5.0
rust-toolchain.toml 1.97.1 1.97.1 (unchanged)

Known Limitations (queued for Phase 4)

  • Local STT is a no-op. The LocalStt backend returns an empty transcript. Users without an OpenAI / Groq API key get a clear error message in the UI; Phase 4 will add whisper-rs for fully offline STT.
  • PTT is toggle, not hold. tauri-plugin-global-shortcut v2.0 only exposes on_pressed (no on_released). Toggle semantics work but are less ergonomic than hold-to-talk.
  • CalDAV is read-only. Creating, updating, or deleting events is queued for Phase 4 (security-sensitive — needs OAuth + the safety policy's confirmation flow).
  • Calendar intent classifier is regex-based. Not a real NLU model. Edge cases ("schedule a meeting tomorrow" — should that be ListTomorrow or ScheduleMeeting?) are handled by the classifier ordering: ScheduleMeeting wins, which is the user's likely intent.
  • Entity auto-extraction from chat history still TODO.

Download

Artifacts for both Windows and Linux are attached below. SHA-256 checksums are also attached as *.sha256 files.

Platform File Type
Windows (x86_64) Aegis-AI_0.5.0_x64-setup.exe NSIS installer
Windows (x86_64) Aegis-AI_0.5.0_x64_en-US.msi MSI installer
Linux (x86_64) aegis-ai_0.5.0_amd64.deb Debian package
Linux (x86_64) aegis-ai_0.5.0_amd64.AppImage Portable AppImage

See ROADMAP.md and CHANGELOG.md for the full release notes.