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.