Skip to content

Releases: hieulouisdev/Axiom

Aegis AI v1.4.0

Choose a tag to compare

@hieulouisdev hieulouisdev released this 20 Aug 12:55

Aegis AI v1.4.0 - Comprehensive Bug-Fix and Reliability Release

A targeted quality release that fixes 17 identified issues across the backend, including 2 logic bugs, a runtime panic risk, RwLock inconsistency, and multiple clippy warnings. No new user-facing features.

Critical Fixes

  • Network listener detection was broken on Linux - Suspicious listening ports were never detected due to case mismatch (LISTEN vs Listen).
  • Threat signature matching used a fake regex engine - Replaced with the real regex crate so all threat signatures work as intended.

Reliability Fixes

  • default_window_icon().unwrap() could panic at startup - Now gracefully skips tray setup.
  • Double-fail MemoryStore retry was misleading - Replaced with clear single expect.

Code Quality

  • Replaced std::sync::RwLock with parking_lot::RwLock in all 9 provider files.
  • Removed dead _force_use hack, cleaned unused imports.
  • Removed dead descriptor field from CustomOpenAiProvider.
  • Marked Bedrock provider as implemented: false until SigV4 signing is rewritten.
  • Removed redundant drop(s) in bypass_mode_status.

See CHANGELOG.md for full details.

Aegis AI v1.3.0

Choose a tag to compare

@hieulouisdev hieulouisdev released this 20 Aug 11:28

Aegis AI v1.3.0 — Rust 1.97.1 Migration and Dependency Cleanup.

Aegis AI v1.2.0

Choose a tag to compare

@hieulouisdev hieulouisdev released this 20 Aug 09:52

Aegis AI v1.2.0 — CI Fix & Code Cleanup

A targeted patch release that fixes the GitHub Actions CI pipeline and cleans up dead code flagged by clippy. No new user-facing features.

Fixed — GitHub Actions (critical)

  • build-release.yml created releases on every push to main — Added tag-gate to build jobs so releases are only created on version tag pushes.
  • release.yml build summary — Guarded find command against missing directories.

Fixed — Rust backend

  • Removed dead code in ai/tools.rs, security/monitor.rs, and ai/providers/openai_compat.rs.
  • Removed unused imports (HashMap, AppHandle, OpenProcess).

Changed

  • Version bumped to 1.2.0.
  • Verified: cargo fmt, npm run build, npx tsc --noEmit all pass clean.

See CHANGELOG.md for full details.

Aegis AI v1.1

Choose a tag to compare

@hieulouisdev hieulouisdev released this 19 Aug 05:25

[1.1.0] — 2026-08-19 — Toolchain & Dependency Modernization

A full-stack upgrade release built on Rust 1.97.1. Every major
dependency on both sides of the app (Rust backend and TypeScript frontend)
was moved to its current stable release, the Rust workspace migrated to
edition 2024, and the CI pipeline was updated to match. All quality
gates stay green: cargo fmt --check, cargo clippy -D warnings, and
104/104 unit tests pass.

Changed — Rust backend

  • Rust edition 2024 — the workspace moved from edition 2021 to edition
    2024 (still pinned to Rust 1.97.1 via rust-toolchain.toml).
    cargo fix --edition rewrote affected if let/else chains to match
    where drop-order semantics changed, and test code that mutates
    Aegis-specific environment variables now uses explicit unsafe blocks
    (edition 2024 marks std::env::set_var/remove_var as unsafe).
  • Tauri 2.0 → 2.11 across the core framework and all 11 official
    plugins (shell, fs, dialog, notification, store, clipboard-manager,
    autostart, global-shortcut, process, updater), plus tauri-build 2.6.
  • reqwest 0.12 → 0.13 — TLS feature renamed from rustls-tls to
    rustls, and the query feature is now explicit.
  • rusqlite 0.32 → 0.40 (bundled SQLite) for the memory store.
  • keyring 2 → 4 — credential deletion now uses delete_credential()
    (the delete_password() name was retired).
  • enigo 0.2 → 0.6 — GUI automation backend (trait-based
    Keyboard/Mouse API confirmed compatible).
  • screenshots 0.2 → 0.8 — complete computer/screen.rs rewrite on the
    Screen API. Capture now returns a raw RgbaImage that we PNG-encode
    via the re-exported image crate. screenshot_area() now performs a
    real native region capture
    (capture_area) instead of returning the
    full screen.
  • notify 6 → 8 for the proactive file watcher.
  • nix 0.29 → 0.31, procfs 0.16 → 0.18 (Linux process/network
    monitoring), windows 0.58 → 0.62 (Windows process/token APIs).
  • tokio 1.42 → 1.53, uuid 1.11 → 1.24, sha2 0.10 → 0.11,
    base64 0.22 → 0.23, bytes 1.9 → 1.12, once_cell 1.20 → 1.21,
    regex 1.11 → 1.13, http 1.1 → 1.5, aws-sigv4 1.2 → 1.5,
    toml 0.8 → 1.1, directories / dirs 5 → 6.
  • 45 new clippy lints raised by Rust 1.97.1 (collapsible_if,
    let_and_return, …) were auto-fixed; the codebase is clean under
    cargo clippy --lib --tests -- -D warnings.

Changed — Frontend

  • React 18 → 19 (with @types/react 19) — the deprecated global
    JSX namespace usage in Guide.tsx was migrated to the react-scoped
    JSX import.
  • Vite 5 → 8 (Rolldown-based) with @vitejs/plugin-react 6 — the
    build.minify: "esbuild" option was dropped in favor of the default
    Oxc minifier.
  • Tailwind CSS 3 → 4 — CSS-first setup via @import "tailwindcss",
    the existing JS design-token config is preserved through @config, and
    the class-based dark mode is restored with @custom-variant. Renamed
    v4 utilities applied: outline-none → outline-hidden,
    blur-sm → blur-xs.
  • zustand 4 → 5, lucide-react 0.460 → 1.32,
    tailwind-merge 2 → 3, TypeScript 5.6 → 5.9, @types/node 26.
  • ESLint 10 flat config added (eslint.config.js with
    typescript-eslint recommended) so npm run lint works out of the box;
    Prettier 3 pinned for npm run format. One real issue surfaced and
    fixed: Chat.tsx used the loose Function type for Tauri event
    unlisteners — now typed as Array<() => void>, and an unused import was
    removed.

Changed — CI/CD

  • GitHub Actions now use Node 22 (required floor for Vite 8:
    ^20.19 || >=22.12). Rust remains pinned at 1.97.1 in both
    workflows, matching rust-toolchain.toml.

Notes

  • The screenshots 0.8.10 crate itself emits a cargo future-incompat
    notice; it is informational only and does not affect the build or any
    quality gate.

Aegis AI v1.0.0

Choose a tag to compare

@hieulouisdev hieulouisdev released this 18 Aug 18:52

Aegis AI v1.0.0 — General Availability

This is the first stable, production-tagged release of Aegis AI. Every public surface (Rust backend, TypeScript frontend, GitHub Actions pipeline, documentation) has been audited and fixed in a single comprehensive sweep.

Highlights

  • 18 hard compile errors fixed in the Rust backend — cargo check, cargo clippy -D warnings, and cargo test --lib (104/104 tests) all pass clean.
  • GitHub Actions workflows fixed — the bundle path was pointing at the wrong directory, the lint steps had continue-on-error: true so failures were silently swallowed, and the cache keys were broken.
  • Real logic bugs fixedmaybe_api_key was leaking credentials to local providers, apply_diff_minimal was a stub that never applied hunks, run_code_eval ignored its timeout, iCal line unfolding corrupted values with spaces, RAG retrieval missed obvious matches, entity extraction captured trailing words from names.
  • Version bumped to 1.0.0 across Cargo.toml, package.json, tauri.conf.json, Sidebar.tsx, README badge, CHANGELOG, ROADMAP.

Verification (Rust 1.97.1)

Check Result
cargo check passes (0 errors)
cargo clippy --all-targets -- -D warnings passes (0 warnings)
cargo test --lib 104/104 pass
cargo fmt --all -- --check passes
npm run build (Vite) passes — 296 kB JS bundle
npx tsc --noEmit passes (0 TypeScript errors)

What's Inside

See CHANGELOG.md for the full, itemized fix list — grouped by Rust backend, GitHub Actions, and Frontend.

Install

Pre-built binaries for Linux (.deb, .AppImage) and Windows (.msi, .exe) are attached below as release assets. SHA-256 checksums are in checksums-*.sha256.

# Verify a download
sha256sum -c aegis-ai_1.0.0_amd64.deb.sha256

Build From Source

git clone --branch v1.0.0 https://github.com/hieulouisdev/Axiom.git
cd Axiom
npm install
npm run tauri:dev      # dev window with hot reload
npm run tauri:build    # release bundle → target/release/bundle/

Prerequisites: Rust 1.97.1 (pinned via rust-toolchain.toml), Node 20+, and Tauri 2 system deps (see README).


Full Changelog: https://github.com/hieulouisdev/Axiom/commits/v1.0.0

Aegis AI v0.9.0 — Documentation & Polish

Choose a tag to compare

@hieulouisdev hieulouisdev released this 18 Aug 16:58

Aegis AI v0.9.0 — Documentation & Polish

What's Changed

All documentation has been completely rewritten for clarity, conciseness, and professional presentation — ready for public showcase.

Highlights

  • README — Centered header with badges, feature table, and screenshots added
  • CHANGELOG — Condensed from verbose per-item details to clean version entries
  • ROADMAP — Compressed 4-phase plan with status tables, v0.9 marked as current
  • Contributing / Privacy / Security — Streamlined for quick onboarding
  • All docs/ — Architecture, providers, safety, developer-guide, security-whitepaper, threat-model, soc2-checklist, reproducible-builds rewritten for clarity
  • All docs/adr/ — Tightened ADR format keeping decisions and consequences
  • All docs/user-guide/ — Concise user-facing documentation
  • Rust 1.97.1 pinned consistently across all documentation

Tech Stack

  • Tauri 2.0 + Rust 1.97.1 backend
  • React 18 + TypeScript + Tailwind CSS frontend
  • rusqlite (embedded SQLite) + reqwest (HTTP)
  • 90+ AI providers · 10,978 models · 28 agent tools · 15 skills

Full Changelog

See CHANGELOG.md for the complete version history.

Aegis AI v0.8.0 — Bug-sweep & i18n completion

Choose a tag to compare

@hieulouisdev hieulouisdev released this 18 Aug 15:50

Aegis AI v0.8.0 — Bug-sweep & i18n completion

Release type: Bug-fix release on top of v0.7.0. Same external API surface;
no breaking changes for end users. Rust 1.97.1 (pinned via
rust-toolchain.toml).

This release is a comprehensive bug-sweep that closes a broken GitHub
Actions workflow, completes the v0.7 i18n expansion (5 languages were
declared but never wired through the backend), fixes a boot-time panic,
restores the quarantine panel in the Security view, and closes a markdown
link XSS vector.


Critical fixes

1. GitHub Actions build-release.yml — broken YAML

The workflow's on.push.branches and on.pull_request.branches keys
contained a malformed YAML literal (branches: ain]) — i.e. the closing bracket of [main] was dropped — that silently
disabled the entire pipeline. Rewritten to branches: [main] and the
per-OS job matrix was aligned with the release.yml workflow:

  • correct target path src-tauri/target/<triple>/release/bundle
  • Linux runner bumped to ubuntu-22.04 with full system-deps list
  • both runners cache the Cargo registry/target via actions/cache@v4
  • cargo fmt + cargo clippy run as informational lint gates
  • checksums uploaded as artifacts (checksums-linux, checksums-windows)

2. i18n Locale expansion — backend now matches frontend

v0.7's CHANGELOG claimed "5 new languages added" but the backend
Locale enum still only had En, Vi. Selecting any of es / fr / de / ja / zh-CN silently fell back to English on the backend and was
narrowed back to en/vi by App.tsx and Settings.tsx on the
frontend. The full 7-locale pipeline now works end-to-end:

  • src-tauri/src/i18n/mod.rs: Locale enum expanded to 7 variants
    (En, Vi, Es, Fr, De, Ja, ZhCn); from_code accepts
    BCP-47 codes incl. zh-CN / zh_cn / zh-Hans; code() round-trips
    for all 7 variants.
  • src/i18n/index.ts exports SUPPORTED_LOCALES and LOCALE_LABELS.
  • App.tsx validates persisted language against SUPPORTED_LOCALES
    instead of hard-narrowing to en/vi.
  • Settings.tsx language picker now renders all 7 locales — English,
    Tiếng Việt, Español, Français, Deutsch, 日本語, 简体中文 — and
    save() calls i18nSetLocale() so the backend stays in sync.

3. state.rs boot-time panic

The in-memory SQLite fallback was
unwrap_or_else(|e| { log; open_in_memory().expect(...) }) — if the
first call failed, the second expect() would also panic and the app
would crash on launch. Reworked to a match with a single retry and
a clear tracing::error! log.

4. Markdown XSS — link href scheme allow-list

The link renderer in Markdown.tsx accepted any href scheme,
including javascript: and data:. Now restricted to http(s) only;
other schemes are rewritten to #.


High-impact fixes

  • Quarantine panel (Security.tsx): was a hardcoded "Phase 2:
    placeholder" even though security_quarantine_list and
    security_restore_file were fully wired end-to-end. The panel now
    loads the live quarantine list, shows original path + reason, and
    exposes a one-click Restore button.
  • Sidebar version (Sidebar.tsx): hardcoded "0.7.0" initial state
    caused a stale version badge before appVersion() resolved. Bumped
    default to "0.8.0".
  • Chat error bubble (Chat.tsx): always labeled "No AI provider
    configured" regardless of the actual error. Now shows the real error
    message via t("common.error"). Also replaced array-index React keys
    with stable ${role}-${i}-${content.length} keys.
  • Settings.tsx save() was missing the i18nSetLocale() call, so
    backend locale never synced after a Settings change. Added with a
    try/catch so dev mode (no Tauri) doesn't break.
  • Backend i18n missing keys: added nav.web, nav.guide,
    nav.theme.toggle, nav.sidebar.toggle, chat.empty.feature*,
    chat.copy, chat.copied, chat.regenerate, settings.bypass_mode,
    settings.theme.*, settings.data.*, settings.encryption.*,
    settings.sandbox.*, settings.telemetry.*, security.quarantine.*,
    security.integrity, security.network_scan, security.threats.recent
    — closes ~20 keys that previously round-tripped as bare key strings
    on the backend.

Version bump 0.7.0 → 0.8.0

Bumped across:

  • package.json
  • Cargo.toml workspace
  • src-tauri/tauri.conf.json
  • Sidebar.tsx default version
  • README.md "Current release" line
  • ROADMAP.md "current release" line

Validation

  • Frontend: tsc --noEmit clean; vite build clean (296 KB JS bundle).
  • Rust backend: full cargo check requires Linux system packages
    (libwebkit2gtk-4.1-dev, libgtk-3-dev, libayatana-appindicator3-dev,
    libxdo-dev, tesseract-ocr, patchelf) that aren't installable in
    a rootless dev shell. The Locale expansion was validated via a
    standalone rustc smoke-test that compiles and exercises every
    from_code / code() / t() code path. The full cargo check will
    run automatically on push via the Build & Release GitHub Actions
    workflow.

Screenshots

Two UI screenshots are attached to this release:

  • aegis-ai-screenshot-1-chat.png — main Chat view with the sidebar
    showing the v0.8.0 version badge and the empty-state chat panel.
  • aegis-ai-screenshot-2-guide.png — the in-app User Guide panel,
    rendered from the static Guide.tsx content.

What's next

The next release (v0.9 / v1.0) will focus on:

  • Wiring the dead-loop subsystems flagged in this bug-sweep
    (modes::continuous::start, modes::ondemand::start,
    clipboard_poll, alerts::send_alert, telemetry::record_event).
  • Persisting CalendarConfig to config.toml (currently lives only
    in process memory).
  • SQLCipher encryption (currently always returns not_supported).
  • Removing unsafe-inline from the production CSP.

See ROADMAP.md and the in-app User Guide for the full plan.

Aegis AI v0.7.0

Choose a tag to compare

@hieulouisdev hieulouisdev released this 18 Aug 14:23

Aegis AI v0.7.0 — Phase 4: Hardening & Distribution

This release completes Phase 4 of the Aegis AI roadmap, making the application suitable for production deployment with security hardening, professional documentation, auto-updates, and expanded localization.

🆕 What's New

Phase 4.1 — Distribution & Packaging

  • Auto-update via tauri-plugin-updater with GitHub Releases endpoint
  • CI/CD pipeline for Linux (.deb / .AppImage / .rpm) and Windows (.msi / .exe NSIS)
  • Reproducible builds documentation + cargo-audit.toml for supply-chain auditing
  • SHA-256 checksums generated per-platform in CI

Phase 4.2 — Security Hardening

  • AI sandbox (security::sandbox): file-write allow-list enforcement even in autonomous/bypass mode. Platform-specific defaults for home subdirectories.
  • Threat model document (docs/threat-model.md): trust boundaries, attack trees, mitigations, residual risks
  • Security white paper (docs/security-whitepaper.md): architecture security, credential management, AI safety, privacy, SOC 2 compliance

Phase 4.3 — Privacy & Compliance

  • Telemetry opt-in layer (security::telemetry): anonymous usage metrics, never on by default. 1000-event cap, random install UUID.
  • SOC 2 Type II readiness checklist (docs/soc2-checklist.md): 46 items across all 5 Trust Service Criteria
  • GDPR export/forget commands already available from v0.6

Phase 4.4 — Documentation

  • mdBook user guide (docs/user-guide/): 12 chapters covering all features
  • In-app User Guide panel: 11-section interactive help with keyboard shortcuts, troubleshooting
  • Developer guide (docs/developer-guide.md): how to add providers, tools, commands
  • Architecture Decision Records (docs/adr/): 5 ADRs

Phase 4.5 — Localization

  • 5 new languages: Spanish 🇪🇸, French 🇫🇷, German 🇩🇪, Japanese 🇯🇵, Simplified Chinese 🇨🇳
  • 92 i18n keys per language (total: 7 languages)

🗑️ Removed

  • Mobile companion (mobile.rs): Aegis AI is desktop-only (Linux + Windows)

⚙️ Changed

  • Settings UI: added AI Sandbox and Telemetry configuration panels
  • Sidebar: added "User Guide" navigation item
  • i18n: expanded to 7 languages with new keys for guide, sandbox, telemetry

📦 Installers

Platform Format
Linux .deb, .AppImage, .rpm
Windows .msi, .exe (NSIS)

🔐 Verification

SHA-256 checksums are generated per-platform by the CI pipeline. Verify with:

sha256sum -c checksums-linux.txt

Full Changelog: v0.6.0...v0.7.0

Aegis AI v0.6.0 — Real Web Access + UI Overhaul + Phase 3 Completion

Choose a tag to compare

@hieulouisdev hieulouisdev released this 17 Aug 18:03

Aegis AI v0.6.0 — Real Web Access + UI Overhaul + Phase 3 Completion

Released: 2026-08-18
Rust toolchain: 1.97.1 (pinned in rust-toolchain.toml)
Tauri: 2.0
Phase: 3 complete (Phase 4 hardening queued for v0.7+)


Highlights

v0.6 closes Phase 3 with five major additions on top of v0.5:

1. Real Web Search 🌐

The web_search AI tool is no longer a stub. It now hits DuckDuckGo's HTML endpoint (no API key needed), parses up to 8 results (title / URL / snippet), and resolves DDG's redirect wrapper to surface the real underlying URL.

The http_fetch tool now uses a built-in readability extractor that strips <script> / <style> / <nav> / <header> / <footer> / <aside> / <form> blocks, decodes HTML entities, and returns up to 32 KB of plain text per page — enough for the AI to ingest most articles without pulling in a heavy browser-engine dependency.

Three new Tauri commands expose these to the frontend: web_search, web_fetch, web_fetch_raw.

A new "Web Search" tab in the sidebar lets the user run searches directly from the UI — with a result list, snippet preview, and one-click page-content viewer.

2. Auto Entity Extraction 🧠

The AI no longer relies on the user explicitly calling memory_remember to persist a fact. Every chat turn now runs a pure-Rust extractor that recognises:

  • Regex entities (confidence 0.6–0.75): emails, URLs, IPv4 addresses, phone numbers (international format), ISO 8601 dates, GitHub repos (owner/repo shape).
  • Heuristic entities (confidence 0.85): my name is X, I live in X, I'm based in X, my pet/dog/cat is called X, I work at X, my favorite X is Y, remember that X, my timezone is X, I'm a X by trade/profession.

New facts are deduplicated against the knowledge base and persisted with a kind:value key, so RAG retrieval sees them on the next turn. This closes the v0.5 → v0.6 RAG loop.

3. UI Overhaul 🎨

A complete visual refresh:

  • Dark mode — toggle in the sidebar, persisted to localStorage, applied via Tailwind's dark: variant on <html>.
  • Gradient accents — blue → purple gradient on primary buttons, the active nav item, the sidebar logo, and the chat empty-state icon.
  • Markdown rendering in chat bubbles — headings, bold/italic, inline code, fenced code blocks with copy button + language label, lists, links, blockquotes. ~150 LOC, no external dependency.
  • Animated empty states — bounce-in gradient sparkle + feature pills.
  • Slide-up message bubbles — every chat message animates in with a subtle 4px translate.
  • Pulse-soft thinking indicator — three dots fade in/out at staggered intervals.
  • Collapsible sidebar — toggle button collapses to icon-only (64px wide).
  • Auto-resizing textarea — the chat input grows with content up to 160px.
  • Better focus rings, themed scrollbars, glassmorphism section headers with backdrop-blur.

4. Mobile Companion Scaffold 📱

A mobile.rs module declares the MobileCapabilities struct (max conversations, remote actions, E2EE sync, desktop version) and a mobile_run() entry point that delegates to the desktop run() on mobile targets. The mobile_capabilities Tauri command exposes this to the frontend.

Full Tauri mobile builds (iOS + Android) are queued for Phase 4 — they require Xcode / Android Studio project generation and signing keys.

5. GDPR Data Export + Audit Log Export 🔐

  • memory_export_all — returns every conversation + message as a single JSON document.
  • memory_forget_all — GDPR "right to be forgotten". Drops conversations, activities, knowledge, embeddings, audit log, integrity baselines.
  • audit_export(limit, format) — exports the AI tool-call audit log as JSON or CSV (with a tiny built-in CSV writer — no csv crate dependency).

All three are surfaced in the new Settings → Data & Privacy panel.


Phase 2.3 / 2.5 Stubs

  • YARA rule loader (security::yara): pure-Rust parser that discovers .yar / .yara files in the user's data directory, parses rule headers + literal strings, and surfaces them in the Security UI. A stop-gap matcher runs the literal strings against file contents during scans. Full YARA semantics queued for Phase 4.
  • SQLCipher opt-in (memory::encryption): an EncryptionStatus API + set_passphrase / disable_encryption stubs. The UI shows "Not compiled in" until the sqlcipher cargo feature is wired in (Phase 4).

Bug Fixes (pre-existing v0.5 issues)

  • SettingsDto was missing bypass_mode in the TypeScript types, which silently dropped the bypass-mode toggle state on save.
  • Sidebar version defaulted to "0.2.0" instead of the actual app version.
  • web_search tool was a stub — replaced with real DuckDuckGo integration.
  • http_fetch returned raw HTML — now uses the readability extractor for GET requests.
  • Chat bubbles didn't render markdown — added the new Markdown component.
  • Chat input didn't auto-resize — now grows with content up to 160px.
  • Theme preference was lost on reload — now persisted to localStorage.
  • No keyboard focus indicator — added :focus-visible with a 2px blue outline.
  • Dark scrollbars were bright even in dark mode — added themed scrollbar styles.

Stats

  • 15 new Tauri commands (total: 71 → 86).
  • 7 new source files (web.rs, entities.rs, encryption.rs, mobile.rs, yara.rs, Markdown.tsx, Web.tsx).
  • 3,556 lines added, 201 lines deleted across 34 files.
  • 0 new external dependencies — every new feature is built on existing crates.
  • Verified: cargo check --workspace passes (33 warnings, 0 errors); npm run build succeeds (228 KB JS / 38 KB CSS gzipped to 67 KB / 6.5 KB).

Upgrade Notes

v0.6 is a drop-in upgrade from v0.5 — no schema migration required. The SQLite schema is unchanged; the new entity-extraction feature backfills facts lazily as the user chats.

To enable web search in the agent loop, no configuration is needed — the web_search tool is registered by default. To disable it, remove the tool from tools::all_specs() in src-tauri/src/ai/tools.rs.

To use the new YARA panel, drop .yar / .yara files into ~/.local/share/aegis-ai/yara/ (Linux) or %APPDATA%\aegis-ai\yara\ (Windows). The directory is created on first launch.


What's Next (Phase 4 — v0.7+)

  • Code-signed Windows installers + notarized macOS builds.
  • Reproducible builds (pin all transitive deps).
  • External security review.
  • Fuzzing the IPC layer with cargo-fuzz.
  • Local whisper-rs STT for sub-2s voice round-trip.
  • Full SQLCipher at-rest encryption (compile-time --features sqlcipher).
  • Tauri mobile builds (iOS + Android).
  • E2EE sync of conversation history via a relay.
  • Documentation site (mdBook → hosted docs).

See ROADMAP.md for the full Phase 4 plan.


Full changelog: see CHANGELOG.md § [0.6.0].
Contributors: @hieulouisdev
License: MIT

Aegis AI v0.5

Choose a tag to compare

@hieulouisdev hieulouisdev released this 17 Aug 12:00

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.