Releases: hieulouisdev/Axiom
Release list
Aegis AI v1.4.0
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
Aegis AI v1.3.0 — Rust 1.97.1 Migration and Dependency Cleanup.
Aegis AI v1.2.0
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
[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 viarust-toolchain.toml).
cargo fix --editionrewrote affectedif let/elsechains tomatch
where drop-order semantics changed, and test code that mutates
Aegis-specific environment variables now uses explicitunsafeblocks
(edition 2024 marksstd::env::set_var/remove_varasunsafe). - 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), plustauri-build2.6. - reqwest 0.12 → 0.13 — TLS feature renamed from
rustls-tlsto
rustls, and thequeryfeature is now explicit. - rusqlite 0.32 → 0.40 (bundled SQLite) for the memory store.
- keyring 2 → 4 — credential deletion now uses
delete_credential()
(thedelete_password()name was retired). - enigo 0.2 → 0.6 — GUI automation backend (trait-based
Keyboard/MouseAPI confirmed compatible). - screenshots 0.2 → 0.8 — complete
computer/screen.rsrewrite on the
ScreenAPI. Capture now returns a rawRgbaImagethat we PNG-encode
via the re-exportedimagecrate.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/react19) — the deprecated global
JSXnamespace usage inGuide.tsxwas migrated to thereact-scoped
JSXimport. - 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.jswith
typescript-eslintrecommended) sonpm run lintworks out of the box;
Prettier 3 pinned fornpm run format. One real issue surfaced and
fixed:Chat.tsxused the looseFunctiontype for Tauri event
unlisteners — now typed asArray<() => 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, matchingrust-toolchain.toml.
Notes
- The
screenshots 0.8.10crate 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
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, andcargo 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: trueso failures were silently swallowed, and the cache keys were broken. - Real logic bugs fixed —
maybe_api_keywas leaking credentials to local providers,apply_diff_minimalwas a stub that never applied hunks,run_code_evalignored 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.sha256Build 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
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
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.04with full system-deps list - both runners cache the Cargo registry/target via
actions/cache@v4 cargo fmt+cargo clippyrun 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:Localeenum expanded to 7 variants
(En,Vi,Es,Fr,De,Ja,ZhCn);from_codeaccepts
BCP-47 codes incl.zh-CN/zh_cn/zh-Hans;code()round-trips
for all 7 variants.src/i18n/index.tsexportsSUPPORTED_LOCALESandLOCALE_LABELS.App.tsxvalidates persisted language againstSUPPORTED_LOCALES
instead of hard-narrowing toen/vi.Settings.tsxlanguage picker now renders all 7 locales — English,
Tiếng Việt, Español, Français, Deutsch, 日本語, 简体中文 — and
save()callsi18nSetLocale()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 thoughsecurity_quarantine_listand
security_restore_filewere 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 beforeappVersion()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 viat("common.error"). Also replaced array-index React keys
with stable${role}-${i}-${content.length}keys. Settings.tsxsave() was missing thei18nSetLocale()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.jsonCargo.tomlworkspacesrc-tauri/tauri.conf.jsonSidebar.tsxdefault versionREADME.md"Current release" lineROADMAP.md"current release" line
Validation
- Frontend:
tsc --noEmitclean;vite buildclean (296 KB JS bundle). - Rust backend: full
cargo checkrequires 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
standalonerustcsmoke-test that compiles and exercises every
from_code/code()/t()code path. The fullcargo checkwill
run automatically on push via theBuild & ReleaseGitHub 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 staticGuide.tsxcontent.
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
CalendarConfigtoconfig.toml(currently lives only
in process memory). - SQLCipher encryption (currently always returns
not_supported). - Removing
unsafe-inlinefrom the production CSP.
See ROADMAP.md and the in-app User Guide for the full plan.
Aegis AI v0.7.0
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-updaterwith GitHub Releases endpoint - CI/CD pipeline for Linux (
.deb/.AppImage/.rpm) and Windows (.msi/.exeNSIS) - Reproducible builds documentation +
cargo-audit.tomlfor 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.txtFull Changelog: v0.6.0...v0.7.0
Aegis AI v0.6.0 — Real Web Access + UI Overhaul + Phase 3 Completion
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/reposhape). - 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'sdark: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 — nocsvcrate 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/.yarafiles 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): anEncryptionStatusAPI +set_passphrase/disable_encryptionstubs. The UI shows "Not compiled in" until thesqlciphercargo feature is wired in (Phase 4).
Bug Fixes (pre-existing v0.5 issues)
SettingsDtowas missingbypass_modein 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_searchtool was a stub — replaced with real DuckDuckGo integration.http_fetchreturned raw HTML — now uses the readability extractor for GET requests.- Chat bubbles didn't render markdown — added the new
Markdowncomponent. - 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-visiblewith 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 --workspacepasses (33 warnings, 0 errors);npm run buildsucceeds (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-rsSTT 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
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) orOPENAI_API_KEY/AEGIS_STT_API_KEYenv vars. LocalSttfallback stub returns an empty transcript when no API key is configured.- Wake-word detector: case-insensitive substring match for
"hey aegis"(override viaAEGIS_WAKE_WORD).
- API key from the OS keychain entry
-
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_ttsorELEVENLABS_API_KEY). - Default backend is auto-selected (cloud if a key is configured, otherwise local).
- Linux:
-
Push-to-talk hotkey — system-wide hotkey (default
Ctrl+Space) registered viatauri-plugin-global-shortcut.- Toggle semantics: first press starts recording, second press stops and sends.
- Configurable via the
voice_ptt_set_hotkeyTauri 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_embeddingstable; 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'sagent_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.
- Wired into
CalDAV Calendar Integration (src/calendar/)
-
CalendarClient— minimal read-only CalDAV client:PROPFINDon the calendar home URL to discover calendar collections.REPORTwith acalendar-querybody to fetch VEVENTs whoseDTSTARTfalls 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=DATEfor 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(matchesrust-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
mainis 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
LocalSttbackend returns an empty transcript. Users without an OpenAI / Groq API key get a clear error message in the UI; Phase 4 will addwhisper-rsfor fully offline STT. - PTT is toggle, not hold.
tauri-plugin-global-shortcutv2.0 only exposeson_pressed(noon_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
ListTomorroworScheduleMeeting?) are handled by the classifier ordering:ScheduleMeetingwins, 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.