# Changelog

All notable changes to Zenii will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.2.6] - 2026-06-02

### Added
- PAR: Polyglot Agent Runtime PAR.1–3 — runtimes, manifest/process model, doctor tool
- PAR.4: launch MCP servers via uvx/npx (build_mcp_stdio_connector)
- PAR.5: self-heal repair loop (GEPA + Hermes) — deterministic patch/verify cycle
- PAR.6: verify runner agents propagate via ToolRegistry
- PAR.7a–d: live self-heal pipeline — FixMemory, Evaluator, Reflector, end-to-end trigger
- Core: wire OpenAI embedding provider at boot

### Fixed
- Heal: prevent patch targets from escaping the plugin directory
- Heal: honor `heal_token_budget` for the reflection trace cap
- Gateway: return 501 for unimplemented embeddings reindex; run runtime probes off async worker thread
- Runtimes: auto-install a missing required runtime when enabled
- Plugins: abort install when dependency setup fails; execute uv-run in plugin project dir; resolve file-based runner entry against install dir

### Changed
- Style: apply cargo fmt across plugins, heal, mcp, runtimes modules
- Docs: comprehensive PAR guide with real-life examples; document OpenAI embedding boot wiring

## [0.2.5] - 2026-05-24

### Fixed
- CI: apply rustfmt formatting to `ai/adapter.rs`, `ai/compression.rs`, `memory/sqlite_store.rs`

## [0.2.4] - 2026-05-24

### Added
- AI: model routing with hint prefixes (`hint:reasoning`, `hint:fast`, `hint:vision`, `hint:summarize`) — configurable via `routing_hint_*` fields in `AppConfig`
- AI: tool output compression middleware (`ToolOutputCompressor`) — per-tool rules for web search, file read, and shell output; configurable char ceiling

### Changed
- Memory: content-addressed IDs — SHA-256 of content replaces random UUID, with fast exact-match dedup before embedding similarity check
- Memory: DB migration v15 adds `content_hash` column and UNIQUE index on `memories` table

### Fixed
- AI: warn via tracing when a routing hint has no configured target model
- AI: remove duplicate `AppConfig` load in `resolve_agent_with_tools`

## [0.2.3] - 2026-05-22

### Fixed
- Import: add `serde_json` library for failing test
- CLI: percent-encode URL segments and read credentials from env
- Delegation: inject system preamble into sub-agents and coordinator
- TUI: fix 6 audit findings — data-loss, panics, and WS error handling
- Daemon: harden startup — ExitCode cleanup, remote-bind guard, signal handling
- Security: apply 10 findings from codex audit of zenii-core
- Tests: reset module cache between isSaving tests to prevent state leak

### Changed
- Style: apply rustfmt formatting across CLI, core, and TUI crates
- Chore: remove AI attribution from commits and enforce functional commit messages
- Deps: bump rig-core from 0.36.0 to 0.37.0

## [0.2.2] - 2026-05-15

### Fixed
- Scheduler: `normalize_cron_expr` defined locally in `tokio_scheduler` to avoid cross-feature import failure on embedded targets built without `--features workflows`

## [0.2.1] - 2026-05-14

### Fixed
- Workflows: 5-field standard cron expressions (e.g. `0 17 * * *`) now accepted — backend normalizes to 6-field format required by `cron` crate before validation
- Workflows: generator prompt no longer advertises `condition` and `parallel` step types (backend rejects them); 6-field cron format contract added so AI generates valid schedules
- Workflows: generated schedules are normalized before `validate()` and TOML serialization
- Workflows: `on_workflow_saved` now called after generate-save so scheduled workflows are registered with the cron scheduler
- Workflows: generate API timeout raised from 15s to 120s to accommodate LLM response time
- Workflows: raw `ERRORCODE:` prefix stripped from error messages in chat and workflows page
- Workflow builder: schedule input normalizes 5-field cron on change; TOML serializer normalizes before writing; import validator checks field count
- Workflow builder: condition node hidden from palette (not yet implemented in backend)

### Added
- Desktop: Open Logs button in sidebar footer dropdown

### Changed
- Cron normalization deduplicated: shared `normalize_cron_expr` helper used by scheduler, workflow validator, and generator

## [0.2.0] - 2026-05-07

### Added
- Wiki: `DELETE /wiki/pages/{slug}` — single-page delete with memory cleanup
- Wiki: background maintenance loop (every 6 h) — runs lint auto-fix (non-destructive only; no auto-deletion)
- Wiki UI: stub detection — amber banner on stub pages with Regenerate / Delete actions, stub badge in page list, stub count in stats bar with filter toggle

### Fixed
- Wiki UI: wikilinks in page body no longer render as `[blocked]`; Streamdown's URL guard now passes for internal anchor links
- Wiki: `delete_page` falls back to disk scan for pages absent from the manifest (e.g. manually-created pages)
- Wiki: `broken_source_ref` lint issues are no longer silently auto-fixed; they are reported for manual review to preserve provenance
- Wiki UI: deleting a single page now refreshes graph, sources, and lint state in the frontend store
- Wiki UI: `broken_source_ref` issues now show 🛠 manual-fix icon (was incorrectly ⚡ auto-fixable) and appear in filter bar under "📎 Source"
- Wiki UI: sidebar dropdown unresponsive after wiki compile error fixed

### Internationalisation
- All 7 locales (zh-CN, es, ja, hi, pt-BR, ko, fr) now have translations for 141 previously-English UI strings covering the workflow builder, wiki UI, schedule labels, settings tabs, and notification targets

## [0.1.24] - 2026-05-04

### Added
- Sidebar: default model chip in footer — shows the active model (e.g. "OpenAI / GPT-5.4 Mini") with a bot icon; clicking navigates to Settings → AI Providers

### Fixed
- Sidebar: header and nav items now stay pinned; only the chat session list scrolls vertically
- Sidebar: nav items (Home → Knowledge Wiki) extracted from the scrollable content zone so they never scroll away
- Sidebar: "Star on GitHub" merged into the same split row as Settings (label shortened to "Star")
- Sidebar: model chip click correctly routes to `/settings#providers` (was returning 404)

### Changed
- Sidebar footer layout: model chip (top) → Docs/API Docs → Star|Settings

### Dependencies
- lru 0.17.0 → 0.18.0
- openssl 0.10.78 → 0.10.79
- rig-core 0.35.0 → 0.36.0
- diffy 0.4.2 → 0.5.0

## [0.1.23] - 2026-05-03

### Added
- Wiki: `ingested_at` ISO 8601 timestamp recorded on each source at ingest time; sources sorted newest-first in the UI
- Wiki: per-source regeneration tracking — spinner is scoped to the specific source being regenerated
- Wiki: source sort toggle (newest / A–Z) in the Sources panel
- Wiki: file-type group hints in the upload drop zone (Markdown/HTML/PDF/Word/ZIP/Images)
- Wiki: `repair_json_escapes` and `repair_literal_newlines` repair strategies so invalid LLM output (bad backslash escapes, literal newlines inside strings) is recovered without a full retry
- Wiki: page-fetch limit raised to 5 000 in the store (backend cap lifted to 100 000) — effectively unlimited for normal wikis

### Fixed
- Dashboard: wiki page count now shows the server-side `total` rather than the number of pages currently loaded in memory
- Dashboard: Query page type added to wiki breakdown; entity/topic accent colours swapped to match legend
- Wiki: lint button now shows its label when idle (was showing only the running spinner label)
- Wiki: sources panel re-lints automatically after an ingest if a prior lint result is already visible

## [0.1.22] - 2026-05-01

### Added
- Workflow builder: NL-to-TOML `WorkflowGenerator` — converts natural language descriptions into runnable workflow TOML via the LLM, wired into AppState and boot
- Gateway: `POST /workflows/generate` endpoint for natural language workflow creation
- Chat UI: Workflow mode button (mutually exclusive with Delegate mode) for inline workflow generation
- Workflow creation page: NL describe mode with dedicated generation flow
- Workflow builder: wiki nodes with full backend implementation
- Workflow builder: n8n-style square card node redesign
- i18n: workflow NL generation message keys across all locale files

### Fixed
- Docs: workflow cancel response corrected to `204 No Content` (was documented as `200 OK`)
- Docs: `POST /workflows/{id}/run` response trimmed to actual shape `{workflow_id, run_id}` (removed phantom `status`/`started_at` fields)
- Docs: CORS behaviour clarified — empty `gateway_cors_origins` denies all cross-origin requests (was incorrectly documented as permissive); default now shows all three Tauri origins
- Docs: provider defaults corrected to `anthropic` / `claude-sonnet-4-6` / `full` autonomy (was `openai` / `gpt-4o` / `supervised` throughout configuration docs)
- Docs: stale `/ws` WebSocket endpoint corrected to `/ws/chat` in `wiki.md` and `development.md`
- Docs: added missing `POST /workflows/generate` and `PUT /workflows/{id}` routes; fixed `POST /workflows` request body field `toml` → `toml_content`; updated `GET /workflows` response to plain array
- Metrics: `gatewayEndpoints` updated from 120 → 133 (105 base + 28 feature-gated)
- Dashboard: `GET /workflows` response contract restored to `Workflow[]` (was silently changed to a paginated envelope, breaking the dashboard render and leaving the Workflows card permanently in skeleton state)
- Dashboard: `workflowsStore.load()` now uses a monotonic request-ID to prevent stale overlapping loads from overwriting newer state
- Dashboard: `workflowsStore.load()` called at most once per page mount (no longer re-triggered on every 2-second WebSocket notification refresh from active channels)
- Dashboard: `refreshTimer` cancelled on component destroy, preventing ghost refreshes after navigation
- Sidebar navigation: restored `{#key localeStore.locale}` wrapper around page content
- i18n: synced all 7 locale files — added 20 missing keys, removed 6 stale keys
- Workflows runtime: DB transaction correctness, condition evaluation, and node execution fixes
- Workflows: added `Workflow::validate()`, path traversal guard, and filename safety checks
- Workflows: phantom tool registration fixed; added `param_summary` to `Tool` trait
- Workflows: post-merge test failures resolved across all agent branches; `schema_version` field added to test initializers
- TOML round-trip: nested args guard, `timeout=0` edge case, and smoother serialisation
- Config: `AppConfig::validate()`, schedule reconciliation, and CLI workflow correctness
- NL generation: JSON extraction reliability, error sanitisation, and structured output robustness
- UI: state races fixed — dirty flag sync, `isSaving` mutex, live CodeView updates
- UI: graph integrity — cycle detection, wiki node round-trip, ref handling
- UI: `goto()` navigation restored, workflows card decoupled, abort race fixed
- Sidebar navigation: `<a href>` restored; workflows card race and error handling hardened
- Polish: 404 handlers, list pagination, i18n parity, `ConditionNode` corrections
- Telegram HTML encoding corrected for workflow node output messages

## [0.1.21] - 2026-04-28

### Fixed
- Wiki ingest file picker (Linux/GTK): add MIME types (`text/markdown`, `text/x-markdown`, `text/plain`, `text/html`, `text/x-org`, `text/x-rst`) alongside bare extensions so GTK file chooser surfaces `.md`, `.txt`, `.org`, `.rst` files instead of silently filtering them
- Wiki ingest routing: align `.html`/`.htm` with backend — route to `/wiki/upload` (MarkItDown conversion) instead of `/wiki/ingest` (raw text)

### Changed
- CI: Docker image build is now opt-in via `--docker` flag; normal releases skip the ~3-hour multi-arch build
- README: sharper why-Zenii framing, expanded wiki/MCP/workflow/scheduler sections, capability table

### Chores
- Bump `lru` 0.16.4 → 0.17.0
- Bump `docker/metadata-action` 5 → 6, `docker/build-push-action` 6 → 7, `docker/login-action` 3 → 4, `docker/setup-buildx-action` 3 → 4

## [0.1.20] - 2026-04-26

### Fixed
- Docker build: strip `zenii-desktop` and `zenii-mobile` from workspace before `cargo chef prepare` to prevent GTK/webkit2gtk deps from entering the recipe and failing the headless cacher stage

## [0.1.19] - 2026-04-26

### Performance
- Docker build: add cargo-chef multi-stage caching (planner/cacher/builder stages) to decouple dependency compilation from source changes, significantly reducing rebuild times

## [0.1.18] - 2026-04-26

### Fixed
- Docker build: replace `--all-features` with explicit feature list to exclude `local-embeddings` — `ort-sys` (ONNX Runtime) pre-built binaries require glibc 2.38+ but `debian:bookworm` only ships glibc 2.36, causing `__isoc23_strtol` undefined reference linker errors

## [0.1.17] - 2026-04-26

### Fixed
- Docker build: copy `wiki/` directory into build context so `include_str!` macros for `SCHEMA.md` and `INGEST_PROMPT.md` resolve at compile time
- Docker build: un-exclude `wiki/*.md` from `.dockerignore` which was stripping the files even after copying the directory

## [0.1.16] - 2026-04-26

### Added
- i18n support for MCP Settings page — 47 message keys added across all 8 languages (EN, ES, FR, HI, JA, KO, PT-BR, ZH-CN)
- `zenii-mcp-server` binary added to CI pipelines (Linux, macOS, Windows) and Docker image

### Changed
- Wiki knowledge graph now shows node labels by default (was auto-hidden above 200 nodes)
- Docker image default entrypoint switched to `zenii-mcp-server` (stdio); use `--entrypoint zenii-daemon` for HTTP API
- Re-enabled Docker build-and-push job in release workflow

## [0.1.15] - 2026-04-25

### Fixed
- MCP client/server settings no longer vanish after page navigation — `PUT /config` now persists `mcp_client_servers`, `mcp_server_tool_prefix`, `mcp_server_exposed_tools`, and `mcp_server_hidden_tools`
- Backend validates `mcp_client_servers` for empty and duplicate IDs (returns 400)
- MCP settings UI reloads from server after every save/delete/toggle; buttons disabled while in-flight to prevent races

### Changed
- MCP stdio transport wired: `McpClientManager` spawns real child-process sessions via rmcp with persistent `Peer<RoleClient>` per server; timeouts 15s connect / 10s discover / 60s call

## [0.1.14] - 2026-04-25

### Changed
- chore(deps): bump fastembed 4.9.1 → 5.13.3 (ONNX Runtime 2.0, `&mut self` embed API wrapped in `Arc<Mutex<T>>`)
- chore(deps): bump rig-core 0.33.0 → 0.35.0 (new `with_history` API, added `cache_creation_input_tokens` field)

### Fixed
- fix(ci): upgrade CI runners from ubuntu-22.04 to ubuntu-24.04 (glibc 2.39) to resolve `ort-sys` linker errors (`__isoc23_strtol` undefined)
- fix(ci): add RUSTSEC-2026-0104 to audit ignore list (rustls-webpki CRL parsing panic in stuck transitive branches)
- fix(clippy): use `sort_by_key` + `Reverse` instead of `sort_by` in wiki search scoring
- fix(clippy): collapse 12 `collapsible_match` patterns in TUI handler into match guards

## [0.1.13] - 2026-04-25

### Added
- feat(memory): BM25 field weighting — configurable per-field weights (key/content/category) for ranked recall scoring
- feat(memory): temporal decay scoring — exponential decay (exp(-λ × days)) de-ranks stale memories; configurable lambda and enable/disable flag
- feat(memory): semantic deduplication — cosine similarity gate prevents storing near-duplicate memories; configurable threshold
- feat(mcp-client): MCP Client feature (`--features mcp-client`) — consume tools from external MCP servers (stdio subprocess or HTTP/SSE) and register them into the agent's ToolRegistry
- feat(config): `mcp_client_servers` — list of external MCP servers with transport (Stdio/Http), optional tool prefix, and enable flag
- feat(settings): MCP Settings tab in desktop UI for managing external MCP server connections
- feat(error): `ZeniiError::MemoryDuplicate` — 409 Conflict when dedup rejects a near-duplicate store

## [0.1.12] - 2026-04-15

### Added
- feat(tools): WikiSearchTool — search, get, and list wiki pages from the agent tool system
- feat(ai): WikiContextPlugin — automatic wiki context injection into agent prompts using word-level query matching

### Fixed
- fix(wiki-context): word-level search + action directive for agent
- fix(frontend): unwrap ToolResult envelope and wrap long tool output

## [0.1.11] - 2026-04-13

### Changed
- chore: correct route count from 114 to 133 across all surfaces

### Dependencies
- chore(deps): bump rustls from 0.23.37 to 0.23.38
- chore(deps): bump openssl from 0.10.76 to 0.10.77
- chore(deps): bump softprops/action-gh-release from 2 to 3

## [0.1.10] - 2026-04-12

### Added
- feat(wiki): stable graph layout with localStorage persistence and loading overlay
- feat(wiki): G4 binary upload — store original+converted separately, route binaries from UI
- feat(wiki): enrich ingest prompt with thinking protocol, body contracts, and new page fields
- feat(wiki): per-source regen, lint auto-fix, cascade delete, dropdown search/filter
- feat(wiki): add open-config-in-editor button to wiki gear menu
- feat(wiki): add Change Prompt, Delete All Wiki, and Delete All Sources modals
- feat(wiki): replace inline panels with popovers and add gear menu
- feat(wiki): add savePrompt, deleteAllSources, deleteAllPages to wiki store
- feat(wiki): add prompt and delete-all gateway handlers
- feat(wiki): add delete_all_sources, set_prompt, delete_all_pages to WikiManager
- feat(wiki): add default INGEST_PROMPT.md to repo
- feat(wiki-cli): add wiki prompt show/set/edit subcommand
- feat(i18n): translate wiki and workflow-builder keys across all locales
- feat: wiki query/lint/regenerate/sources features and dashboard breakdown
- feat: enhance wiki with AI multi-page ingestion and wiki UI components

### Fixed
- fix(wiki): auto-remove duplicate page slugs with priority-based dedup
- fix(wiki): robust LLM response parsing with multi-strategy extractor
- fix(wiki): eliminate graph centering delay by hiding until simulation converges
- fix(wiki): open up graph layout with stronger repulsion and wider clusters
- fix(wiki): deduplicate graph nodes, auto-center graph, hide misleading lint fix button
- fix(wiki): deduplicate pages and open external links in system browser
- fix(wiki): resolve 7 codex audit findings across backend and frontend
- fix(wiki): surface real LLM errors in regenerate 500 responses
- fix(wiki): improve ingest feedback and refresh graph/sources after ingest
- fix(wiki): G10 housekeeping — pagination, a11y, query slugs, sort, parse_page, log rotation
- fix(wiki): G9 perf — schema caching, simulation rebuild guard, subprocess timeout, bundle splitting
- fix(wiki): G8 frontend UX — file size check, modal state, dedup loads, error recovery, loading guard
- fix(wiki): G7 memory sync cleanup, config load on route, open_wiki_dir command
- fix(wiki): G6 frontend — AbortController cleanup, onDestroy timeouts, request sequence tokens
- fix(wiki): G5 error handling — LLM parse logging, manifest bootstrap distinction, missing file warnings
- fix(wiki): G3 security — path traversal guard, slug validation, content size limits
- fix(wiki): G2 regenerate safety — atomic swap, duplicate slug dedup, correct provenance
- fix(wiki): G1 concurrency — WikiManager Mutex, spawn_blocking wrappers, atomic appends
- fix(wiki): write merged config before opening editor so wiki_graph_* fields appear
- fix(wiki): cascade delete pages on delete-all-sources, fix regeneration and query save bugs
- fix: green badge for active channels, wiki graph on load, auto-hide labels
- fix: auto-center wiki graph on open and fix sidebar scroll

### Changed
- refactor(wiki): move WikiGraph magic numbers into AppConfig, fix source listing
- refactor: replace SvelteFlow with d3-force for wiki graph visualization
- chore: complete meso→zenii rebranding across all remaining files
- docs(wiki): document binary ingestion support, expand handler tests, fix WebKitGTK drag-drop

## [0.1.9] - 2026-04-09

### Added
- LLM wiki with Karpathy-pattern knowledge base — structured wiki under `wiki/` with smart title resolution
- Wiki docs-site integration — wiki page added to documentation site
- `AGENT.md` — integration guide for Claude Code, Cursor, Gemini CLI, and MCP clients
- MCP server binary (`zenii-mcp-server`) — exposes all tools via Model Context Protocol over stdio transport
- MCP tool visibility enforcement — `mcp_server_exposed_tools` (allowlist) and `mcp_server_hidden_tools` (denylist) in config
- MCP tool prefix (`zenii_`) with configurable naming via `mcp_server_tool_prefix`
- A2A Agent Card endpoint at `GET /.well-known/agent.json`
- Security policy enforcement for MCP tool calls

### Changed
- Bump minijinja from 2.18.0 to 2.19.0
- Bump tauri-plugin-updater from 2.10.0 to 2.10.1
- Bump sqlite-vec from 0.1.8 to 0.1.9
- Bump arc-swap from 1.9.0 to 1.9.1
- Bump tokio from 1.50.0 to 1.51.0
- Refreshed documentation, templates, and contributing guide

### Removed
- MCP client module — removed non-functional client code and `mcp-client` feature flag

## [0.1.8] - 2026-03-31

### Changed
- Bump sha2 from 0.10.9 to 0.11.0
- Bump cron from 0.15.0 to 0.16.0
- Bump typescript from 5.9.3 to 6.0.2
- Bump @lucide/svelte from 0.577.0 to 1.7.0

## [0.1.7] - 2026-03-31

### Added
- Visual workflow builder with modular node registry

### Fixed
- Workflow builder polish — save, TOML serialization, audit fixes
- Remove useSvelteFlow() call that crashed workflow builder
- Resolve 6 workflow builder audit issues — data integrity and UI honesty
- channel_send node missing required 'action' field in workflow args
- False 'unsaved changes' after load + default channel_send action to 'send'

### Changed
- README hero redesign + mobile crate scaffold

## [0.1.6] - 2026-03-29

### Fixed
- Onboarding wizard now starts at the correct step on first open instead of skipping to profile

### Changed
- README tagline: "30+ models" → "6+ model providers" for accuracy

## [0.1.5] - 2026-03-28

### Added
- Multilingual UI: 8 languages (English, Chinese, Spanish, Japanese, Hindi, Portuguese, Korean, French)
- Language switcher in Settings > General with auto-detection from browser language
- 607 i18n message keys across 40+ components via paraglide-js
- Locale auto-detection from paraglide runtime (no hardcoded locale list)
- i18n for tool status labels, channel config metadata, attachment labels, workflow errors

### Fixed
- Language switch now takes effect immediately (reactive `$derived` + `{#key}` blocks)
- CI: paraglide compilation before svelte-check with correct outdir
- CI: `@{sender}` JSDoc parse error in paraglide-generated code

## [0.1.4] - 2026-03-24

### Fixed
- Rustfmt line-length violations in channel_tool.rs
- WebSocket test assertions updated to match 2-arg onError(error, hint) signature

### Changed
- website-data.json now included in version-bump.sh (9th synced file)
- Updated website-data.json stats: backendTests 1524, crates 6

### Docs
- Added demo GIF to README with Git LFS

## [0.1.3] - 2026-03-24

### Fixed
- Cross-client synchronization: CLI/TUI activity now propagates to desktop in real-time
- WS chat and delegation handlers now publish `MessageAdded` events for other connected clients
- Homepage dashboard auto-refreshes when sessions, messages, or channel activity occurs
- Active chat view live-reloads messages when updated from another client

### Added
- `ChannelSendTool` persists outgoing messages to channel sessions and publishes events for inbox visibility

### Changed
- Updated error codes and agent error sub-classification documentation

## [0.1.2] - 2026-03-23

### Added
- Centralized error enrichment system (`ErrorHint` + `enrich_error()`) with actionable hints for 15+ error patterns
- Sub-classified agent error codes: `ZENII_AGENT_AUTH`, `ZENII_AGENT_RATE_LIMIT`, `ZENII_AGENT_MAX_TURNS`, `ZENII_AGENT_CONTEXT_LENGTH`, `ZENII_AGENT_MODEL_NOT_FOUND`, `ZENII_AGENT_TIMEOUT`, `ZENII_AGENT_CONNECTION`, `ZENII_AGENT_NOT_CONFIGURED`
- `hint` field in HTTP error responses and WebSocket error messages (backward-compatible)
- CLI now displays colored error hints below error messages
- Frontend displays actionable hints below errors in chat view
- Channel error replies: agent failures now send a user-friendly message instead of silently dropping

### Changed
- `agent_max_turns` default increased from 4 to 8, clamp ceiling raised from 16 to 32
- Renamed P4_ prefixed error codes: `ZENII_P4_IDENTITY` → `ZENII_IDENTITY_ERROR`, `ZENII_P4_SKILL` → `ZENII_SKILL_ERROR`, etc.
- Agent error codes are now sub-classified by failure type instead of all mapping to `ZENII_AGENT_ERROR`

## [0.1.1] - 2026-03-23

### Fixed
- Delegation results now render immediately after completion instead of showing blank until re-navigation
- Delegation sub-agents now run in parallel by default (strengthened decomposition prompt)
- `delegation_completed` WS event no longer silently dropped due to `tokio::select` race in backend
- Stop button and component unmount during delegation now preserve partial results via fallback
- Memory and scheduler stores now guard against stale API responses during rapid navigation

## [0.1.0] - 2026-03-22

### Added
- Dashboard homepage with live stats cards for Chat, Channels, Memory, Schedule, and Workflows
- Workflow steps now execute real LLM agent calls instead of mock responses

### Changed
- Rebranded from "AI assistant" to "Your private AI backend" across all surfaces (Cargo.toml, tauri.conf.json, desktop entry, settings page)
- README: fixed test/tool/route counts, restructured CLI commands section, reformatted gateway routes table
- README: added links to `docs/api-reference.md` and `docs/cli-reference.md`

### Fixed
- Frontend test mocks updated to match `response.text()` refactor in API client
- Embedding endpoint cleanup for consistency

## [0.0.46] - 2026-03-22

### Fixed
- Memory recall with empty query now returns all entries ordered by recency instead of FTS5 error
- MemoryCategory JSON serialization uses plain strings (`"core"`) instead of tagged enums (`{"Custom":"core"}`)
- MemoryCategory matching is now case-insensitive (`"Core"` and `"core"` both resolve correctly)
- Frontend memory store uses correct `created_at` format (ISO string) matching backend
- Memory page search clears to show all entries when query is emptied
- API client handles empty response bodies gracefully (not just 204)

### Changed
- Documentation route count corrected from 84 to 114 across all surfaces
- Documentation tool count corrected from 15 to 17 (15 base + 2 feature-gated)
- `update-docs` command uses canonical `no_commit/api-routes.md` instead of re-parsing routes.rs

## [0.0.45] - 2026-03-22

### Added
- Cross-client real-time data sync via EventBus — changes made through CLI, TUI, or any HTTP client now broadcast to all connected desktop/WebSocket clients
- 9 new AppEvent variants: MemoryChanged, SchedulerJobsChanged, CredentialsChanged, ProvidersChanged, SkillsChanged, IdentityChanged, WorkflowsChanged, PluginsChanged, PermissionsChanged
- WsOutbound::DataChanged generic event for domain-level change notifications
- Event publishing in 10 handler files covering 28 mutation endpoints (memory, config, scheduler, credentials, providers, skills, identity, workflows, plugins, permissions)
- Frontend notification store handles `data_changed` WebSocket events and auto-refreshes affected stores

### Fixed
- Correct all download paths, artifact names, and CLI commands in docs

### Changed
- Documentation updates

## [0.0.44] - 2026-03-21

### Fixed
- Add 15s timeout to browser-side fetch — prevents indefinite hangs when daemon is unresponsive in browser mode
- Fix session creation race condition — block WebSocket push events during in-flight `create()` to prevent duplicate sessions
- Add concurrent load guard (`loadVersion`) to sessions and providers stores — prevents stale data from overwriting newer state
- Add error handling with toast feedback to all async click handlers (new chat, delete, rename, memory CRUD)
- Add click-debounce guard to "New Chat" buttons — prevents creating multiple sessions on rapid clicks
- Wrap ChatView `onMount` in try-finally — ensures prompt input renders even if provider load fails
- Catch unhandled promise rejection on fire-and-forget `sessionsStore.get()` in chat route
- Add 10s connection timeout to browser WebSocket — prevents indefinite connection attempts

## [0.0.43] - 2026-03-21

### Fixed
- Use Tauri HTTP/WebSocket plugins on all desktop platforms (macOS, Linux, Windows) — fixes provider loading and chat on macOS/Linux where WKWebView/webkit2gtk CORS blocks `tauri://` to `http://127.0.0.1` requests
- Add 15s timeout to Tauri HTTP plugin fetch — prevents app hang on macOS when plugin is slow to init
- Add 10s timeout to Tauri WebSocket plugin connect for chat and notification streams
- Fix `$effect` re-trigger in chat page — streaming state changes no longer cause message flicker after response completes
- Fix stale message load race condition — rapid session switching no longer shows wrong session's messages
- Fix orphaned WebSocket on chat navigation — ChatView now cleans up stream on unmount
- Fix duplicate session on "New Chat" — suppress self-originated `session_created` push events that race with local creation
- Fix `bumpSession` Svelte 5 reactivity — use array reassignment instead of in-place `splice()` mutation
- Prevent duplicate session on new chat from WebSocket push race condition
- Resolve app hang and race conditions on macOS desktop

## [0.0.42] - 2026-03-21

### Fixed
- Add `app` bundle to macOS CI for auto-updater support — `latest.json` was missing `darwin-aarch64` and `darwin-x86_64` entries because only DMG (non-updater-compatible) bundles were built
- Handle missing Desktop directory in case-insensitive path test

## [0.0.41] - 2026-03-21

### Fixed
- Restrict Tauri HTTP/WebSocket plugin routing to Windows only — fixes macOS provider detection and Linux chat connections broken by the WebView2 mixed-content bypass

### Style
- Fix rustfmt formatting across 10 files

## [0.0.40] - 2026-03-21

### Fixed
- Resolved 22 audit findings across agent, delegation, workflow, and scheduler systems
- Fixed delegation race condition and invalid tool names in decomposition
- Updated docs for content_search tool and fixed std::sync::Mutex in async path

### Added
- Cross-client session sync via event bus and WebSocket push

## [0.0.39] - 2026-03-21

### Fixed
- Windows desktop app: resolved WebView2 mixed-content blocking that prevented all HTTP API calls and WebSocket connections from `https://tauri.localhost` to `http://127.0.0.1`
- Added `tauri-plugin-http` and `tauri-plugin-websocket` to route requests through Rust, bypassing browser mixed-content policy
- Resolved 7 race conditions and concurrency bugs identified in cross-model code audit (tray shutdown, daemon SIGTERM, approval timeout cleanup, WS reconnect timer, WS warning schema, TUI error handling)

## [0.0.38] - 2026-03-21

### Added
- Delegation persistence: agent task details (descriptions, tool counts, tokens, durations, status) are now stored in the database and rendered in chat history
- New `DelegationSummary` component renders a static agent tree on historical messages
- DB migration v13: `delegation_tasks` table for storing per-agent delegation metadata
- `DelegationRecord` and `DelegationAgentRecord` types in backend API and frontend stores
- `description` field added to `TaskResult` for delegation agent descriptions
- Per-tool permission enforcement: AskOnce/AskAlways tools now trigger the approval gate during agent execution
- `executable_tools()` method on `PermissionResolver` — includes all non-Denied tools so AskOnce/AskAlways tools reach the approval gate
- `from_tools_full()` on `RigToolAdapter` — unified constructor wiring permissions, cache, approval, and events
- Automatic updates via `tauri-plugin-updater` — desktop app checks GitHub releases for new versions
- `dir:` and `crate:` scope options for `codex-audit` command

### Fixed
- Delegation responses now persist to the database, fixing blank screen after delegation completion
- `MessageWithToolCalls` API response now includes delegation data alongside tool calls
- Chat: streamed assistant responses no longer flash blank during server reconciliation — streaming UI stays visible until server data is confirmed
- UI: message action buttons now align properly with user/assistant message bubbles
- Delegation: sub-agent tool execution restored by skipping approval gate for delegated agents

## [0.0.37] - 2026-03-20

### Fixed
- CI: added @types/node for paraglide async_hooks type resolution in CI

### Changed
- CI/CD: reverted ci and release workflow adjustments
- CI/CD: release pipeline fixes

## [0.0.36] - 2026-03-20

### Changed
- CI/CD pipeline enhancements for improved build and release workflows

## [0.0.35] - 2026-03-20

### Fixed
- CLI: `workflow cancel` now uses correct route `/workflows/{id}/runs/{run_id}/cancel` (was 404ing against non-existent `/workflows/{id}/cancel`)
- CLI: `workflow run` now prints `run_id` so users can reference it for cancel
- API: channel connect endpoint returns error on connect failure instead of silent 200 OK
- Security: WebSocket connection URL no longer logs auth token to browser console

## [0.0.34] - 2026-03-20

### Added
- Tool approval system: `needs_approval()` trait method, `ApprovalBroker`, approval rules with persistent storage
- 3 new API routes: `GET /approvals/rules`, `DELETE /approvals/rules/{id}`, `POST /approvals/{id}/respond`
- WebSocket approval request/response events for real-time UI interaction
- Shell tool approval for dangerous commands (requires user confirmation)
- Frontend tool approval UI components and approval store
- Workflow CLI command (`zenii workflow list/create/get/show/run/delete/history/cancel`)
- Example workflow TOML files in `examples/workflows/`
- Channel notifications (Telegram, etc.) on workflow completion via SchedulerNotification event
- Desktop OS notifications on workflow completion
- Auto-refresh workflow list in frontend when workflow completes
- `get_text()` method on ZeniiClient for plain text API responses

### Fixed
- Chat: first-message race condition — `goto()` now awaited, route effect guards against clearing during active stream
- Chat: session ID closure capture — `activeStreamSessionId` prevents stale callbacks from corrupting wrong session
- Chat: synthetic message IDs — `finishStream()` reconciles with server instead of fabricating untracked messages
- Chat: manual stop no longer creates phantom assistant messages (new `cancelStream()` method)
- Desktop: graceful shutdown — sends gateway `shutdown_tx` and waits for WAL checkpoint before exit
- Boot: readiness-gated store init — `sessionsStore.load()` and `notificationStore.connect()` now wait for AuthGate readiness
- WebSocket: unknown message types no longer silently dropped (added `default` case + `onWarning` callback)
- Stores: scheduler, workflows, channels, inbox now surface errors via `error` field instead of swallowing as empty lists
- Workflows: cancel rollback — restores running state on API failure instead of silent `.catch(() => {})`
- Inbox: message deduplication on WebSocket reconnect (2-second window check)
- Notifications: `retryConnection()` method resets reconnect budget; layout shows "Reconnect" banner
- Channels: config update rollback on API failure (snapshot/restore pattern)

### Changed
- Settings page: lazy-loaded tab components (162 kB → 33 kB initial chunk, 80% reduction)
- Shiki themes: wrapped in arrow functions for lazy loading

### Docs
- Updated route/tool/provider counts across all documentation surfaces (133 routes, 14 tools, 6 providers)
- CLI reference: workflow command section with 8 subcommands and recipe
- API reference: added missing `/workflows/{id}/raw` and `/workflows/{id}/cancel` endpoints
- Architecture: added Approvals section, updated Workflows/Plugins/Sessions route tables
- README: workflow CLI commands in quick reference table

## [0.0.33] - 2026-03-20

### Added
- Delegation mode for CLI chat with workflows enabled by default
- Real-time workflow execution visibility via WebSocket streaming
- WorkflowTool exposing workflow system to AI agent with context plugin
- Update/modify capabilities for workflows and scheduler
- Edit and re-execute for user messages in chat UI

### Fixed
- Windows boot detection using IPC with diagnostic logging
- macOS release timeout increased from 30m to 45m

### Changed
- Reduced vertical padding across UI components

### Docs
- Delegation system flow sequence diagram

## [0.0.32] - 2026-03-20

### Added
- Workflow Engine: multi-step automation pipelines defined in TOML with DAG-based execution (petgraph), 5 step types (tool, LLM, condition, parallel, delay), minijinja template resolution between steps, retry/timeout/failure policies, DB-persisted run history, scheduler integration, and 7 API endpoints (feature-gated: `--features workflows`)
- Agent Delegation: parallel sub-agent execution for complex tasks with LLM-powered task decomposition, isolated sessions per sub-agent, tool filtering via allowlist, dependency-based wave execution, token budget and timeout controls, real-time event bus updates, cancel support, and 2 API endpoints
- Multi-agent state display with real-time delegation tracking in frontend
- Copy and retry action buttons on user messages in chat UI

### Fixed
- Windows startup failure + cross-platform compatibility audit

### Style
- Applied cargo fmt across workspace

## [0.0.31] - 2026-03-20

### Added
- Human schedule type for scheduler with cron timezone fix and auto-cleanup of one-time jobs
- Unified diagnostic file logging across all binaries (desktop, daemon, CLI, TUI)
- Session list refresh button with auto-reload on focus
- Documentation link in sidebar

### Fixed
- Whole-app workflow audit: security, agent safety, lifecycle, and cleanup improvements
- Channel broadcast for scheduler/notifications, replaced datetime-local input
- Scheduler execution audit: publish agent responses, parallel jobs, error backoff
- Shell command permissions in chat: OS-aware security, expanded risk lists, surface-based tool filtering

### Docs
- Documented unified diagnostic logging across all binaries

## [0.0.30] - 2026-03-19

### Added
- FileCredentialStore: AES-256-GCM encrypted file-based credential storage as persistent fallback when OS keyring is unavailable
- Credential fallback chain: KeyringStore → FileCredentialStore → InMemoryCredentialStore
- `credential_file_path` config option to override default credential file location

### Fixed
- API keys no longer lost on macOS after binary recompilation or app update (keyring signature revocation now falls back to encrypted file instead of volatile RAM)

### Changed
- Updated docs-site with FileCredentialStore fallback chain documentation
- Updated README with FileCredentialStore fallback chain details

### CI
- Added GitHub Actions workflow to auto-deploy docs-site to Vercel
- Fixed Vercel deployment pipeline to use pull/build/deploy --prebuilt pattern

## [0.0.29] - 2026-03-19

### Fixed
- Onboarding no longer re-triggers when API keys are missing — only `user_name` and `user_location` gate setup
- Auto-migration for pre-v0.0.28 configs: infers completed onboarding from filled profile fields

### Changed
- Updated competitive comparison table in README with NemoClaw

## [0.0.28] - 2026-03-18

### Fixed
- Prevent onboarding re-trigger on restart with persistent `onboarding_completed` flag in config.toml
- Works across all platforms: macOS Keychain revocation, Linux in-memory fallback, Windows
- Chat view shows actionable banner when API key is missing instead of re-running full wizard

## [0.0.27] - 2026-03-18

### Fixed
- Onboarding re-trigger bug: log credential access errors instead of silently swallowing them
- Onboarding wizard now auto-skips to first incomplete step when re-triggered
- Error handling added to model selection step in onboarding wizard
- Improved keyring fallback warning with persistence and macOS code-signature hints
- Added setup status diagnostic logging for debugging onboarding flow

### Changed
- Updated AI provider models: added GPT-5.4 family, Gemini 3.x, expanded OpenRouter and Vercel AI Gateway
- Updated Anthropic model context limits (Opus/Sonnet 4.6 to 1M tokens)
- Added provider documentation links in AI Providers settings page
- LICENSE updated

## [0.0.26] - 2026-03-18

### Fixed
- Correct boot.rs test assertions for CI feature unification

### Changed
- Updated README
- Updated Tauri ACL manifests schema for latest plugin versions
- Added provider setup description in Settings AI Providers page (matching onboarding step 1)

## [0.0.25] - 2026-03-17

### Fixed
- Removed redundant "No API key" warning from onboarding step 1 (still shown in Settings)
- Replaced confusing blue "missing key" warning in step 2 with green model confirmation message

### Changed
- Added custom provider guidance note in onboarding step 1 pointing to "+ Add Provider" button
- Updated contact email in CODE_OF_CONDUCT.md and SECURITY.md

## [0.0.24] - 2026-03-17

### Added
- Top navigation arrows (chevron left/right) in onboarding wizard step indicator
- Clickable completed-step circles to jump back to previous steps
- Auto-select first available model when entering step 2

### Changed
- Replaced hardcoded Anthropic API key warning with provider-agnostic guidance message that reads the actual default provider from config

## [0.0.23] - 2026-03-16

### Changed
- README Quick Start now leads with GitHub Release installer download table (Linux, macOS, Windows, ARM)
- "Getting Started" section renamed to "Building from Source"
- Website and docs header links displayed on separate lines

## [0.0.22] - 2026-03-16

### Added
- Disclaimer to onboarding, about dialog, and README
- Docusaurus documentation site with frontmatter for all docs
- Install script and updated README with quick start guide
- Architecture diagram images (system architecture, 6 layers of defense)
- Documentation badge in README
- Comprehensive docs site landing page with feature tables and quick links

### Fixed
- Incorrect API fields, org names, and URLs across all documentation
- Use `| bash` instead of `| sh` in install instructions

### Changed
- README hero text revised for broader audience ("Powered by Rust" instead of "Just Rust")
- Replaced mermaid architecture diagram in README with PNG image
- Dependency updates:
  - crossterm 0.28.1 → 0.29.0
  - rusqlite 0.38.0 → 0.39.0
  - dialoguer 0.11.0 → 0.12.0
  - ratatui 0.29.0 → 0.30.0
  - pulldown-cmark 0.12.2 → 0.13.1
  - vite 7.3.1 → 8.0.0
  - jsdom 28.1.0 → 29.0.0
  - @lucide/svelte 0.561.0 → 0.577.0
  - @sveltejs/vite-plugin-svelte → 7.0.0

## [0.0.21] - 2026-03-15

### Added
- Token usage logging with date-rotated JSONL files for tracking AI API consumption
- Browse official plugins UI and plugin integration tests

## [0.0.20] - 2026-03-14

### Added
- Channels setup step in onboarding wizard across Desktop, CLI, and TUI (Telegram, Slack, Discord)

### Changed
- `/ship` command now includes automatic documentation update step before committing

## [0.0.19] - 2026-03-14

### Added
- Plugin UI enabled across Desktop/Web (removed experimental placeholder) and TUI (new PluginList mode with table view and keybindings)

### Changed
- Updated architecture and process documentation for plugin system across all interfaces

## [0.0.18] - 2026-03-14

### Added
- Onboarding wizard across Desktop, CLI, and TUI with provider selection and API key setup
- LLM-based automatic fact extraction from conversations

### Changed
- UI polish — sidebar, settings, and consistency improvements
- README comparison table trimmed to OpenClaw and ZeroClaw only

### Fixed
- Ignore fastembed tests that require ONNX model download in CI

## [0.0.17] - 2026-03-13

### Added
- Top-level `zenii` crate with workspace metadata for crates.io publishing
- Workspace-level repository, homepage, keywords, categories fields across all crates

### Changed
- macOS release builds now produce separate arm64 and x86_64 binaries instead of universal (lipo) binaries
- README rewritten with comparison table, pain-point framing, and "What Zenii is NOT" section

### Fixed
- Window close and tray quit now both fully exit the app (no more background orphan processes)

## [0.0.16] - 2026-03-13

### Changed
- Full rebrand from MesoClaw to Zenii across entire codebase
- Renamed all crate directories (`mesoclaw-*` → `zenii-*`) and package names
- Updated binary names, config paths, keyring service IDs, and desktop app metadata
- Updated CI/CD workflows, documentation, scripts, and frontend references
- Replaced obsolete `logo.png` with new Zenii branding assets

## [0.0.15] - 2026-03-13

### Added
- Per-tool call limits in ToolCallCache with canonical argument hashing for deduplication
- Contacts module for channel message routing with contact resolution
- ChannelSendTool expanded with contact lookup and `list_contacts` action
- Shimmer loading animation component for active tool execution in chat UI
- Tool permission system with tool dedup cache

### Changed
- Telegram formatter improvements for paragraph spacing
- Context injection and prompt refinements for better agent behavior
- Desktop branding updates (app name, desktop entry)
- Sanitized example names in docs and tests

## [0.0.14] - 2026-03-12

### Added
- Plugin-based prompt strategy system with ~65% token reduction (PromptStrategy + PromptPlugin traits, CompactStrategy, LegacyStrategy, PromptStrategyRegistry)
- 6 built-in prompt plugins: Memory, UserObservations, Skills, LearnedRules, Channel, Scheduler
- Token budget overflow protection with priority-based trimming
- Config fields: `prompt_compact_identity`, `prompt_max_preamble_tokens`
- Frontend "Compact Prompts" toggle and "Max Preamble Tokens" input in Agent Features settings

### Fixed
- Telegram long-polling timeout mismatch causing persistent failures
- sqlite_vec transmute for aarch64 compatibility (c_char/c_int types)
- rustfmt cross-version compatibility via `#[rustfmt::skip]`

### Changed
- Chat, WebSocket, and channel router handlers refactored to use single `prompt_strategy.assemble()` call
- Docker image publishing temporarily disabled in release workflow
- Documentation updated: installation, deployment, architecture, configuration, processes

## [0.0.13] - 2026-03-12

### Added
- Notification router with desktop OS notifications and channel routing
- Per-event-type notification routing rules (desktop, channel targets)
- Desktop notification support via Tauri IPC (`showNotification` wrapper)
- GeneralSettings UI toggle for desktop notifications
- Gateway config handler for notification route CRUD
- Frontend notification store wired to WebSocket events
- TUI client with async event loop and WebSocket streaming
- Channel router with supervision, exponential backoff, and auto-reconnect
- Docker multi-arch image publishing to GitHub Container Registry
- TUI binary included in multi-platform release pipeline

## [0.0.12] - 2026-03-11

### Fixed
- Read user location/timezone from live config instead of frozen BootContext, so onboarding location changes take effect immediately without restart

## [0.0.11] - 2026-03-11

### Added
- Context-driven auto-discovery with keyword-based domain detection (Channels/Scheduler/Skills/Tools) for filtered context injection
- AgentSelfTool (`agent_notes`): agent-writable behavioral rules by category, stored in DB, auto-injected into context
- OpenAPI 3.1 interactive documentation via utoipa + Scalar UI at `/api-docs` (feature-gated `api-docs`)
- First-run onboarding flow with browser timezone auto-detection and user location input (`GET /setup/status` + SetupDialog)
- User location and timezone awareness injected into agent context for location-sensitive queries
- Model capability validation (`supports_tools` pre-check) to prevent tool-calling errors with incompatible models
- Agent reasoning protocol refinements in context composition
- Embedding availability tracking in provider registry
- `GET /config/file` endpoint for raw config file content
- `GET /setup/status` endpoint for first-run setup detection

### Changed
- Tool count: 14 base + 2 feature-gated = 16 total (added `agent_self`)
- Route count: 75 base + 17 feature-gated = 92 total

### Fixed
- rustfmt formatting issues

### Documentation
- Updated README, architecture, phases, and processes docs for all post-v0.0.10 features
- Updated test badge: 1046 Rust + 37 JS
- Added 5 new architecture sections with Mermaid diagrams
- Added 3 new process flows (onboarding, auto-discovery, agent self-learning)

## [0.0.10] - 2026-03-10

### Fixed
- Fix release asset name collisions: standalone binaries now use platform-specific names (zenii-linux, zenii-macos) to prevent duplicate upload failures

## [0.0.9] - 2026-03-10

### Fixed
- Release pipeline: exclude keyring/dbus from embedded cross-builds, fix asset name collisions, disable musl target pending OpenSSL cross-compilation fix
- Remove musl references from release checksums and artifact globs to prevent missing file warnings
- Fix GitHub Actions injection pattern in version extraction step

## [0.0.8] - 2026-03-10

### Added
- Plugin system (Phase 9): manifest parser, registry with JSON persistence, JSON-RPC process manager, tool adapter, installer with git integration, and 8 gateway API endpoints

### Fixed
- Clippy warnings breaking CI: duplicate cfg gate on local_embeddings, missing transmute annotations in boot.rs

## [0.0.7] - 2026-03-10

### Fixed
- Security hardening: CORS origins, credential exposure, path traversal, shell injection, error sanitization
- Concurrency hazards: DashMap guard held across await, scheduler double-start race, mutex poisoning (parking_lot)
- Channel reliability: UTF-8 safe message splitting, atomic registry operations, session caching
- First-run UX: AuthGate exponential backoff, chat no-model CTA, WebSocket reconnection
- Config state integrity: ArcSwap for hot-reload, session ordering, frontend config key alignment
- Settings truthfulness: hide phantom features (Perplexity, SerpAPI, Matrix), verify channel status
- Svelte 5 compiler warnings eliminated (19 → 0)
- FTS5 query escaping for special characters
- Skills registry duplicate key rejection
- Release pipeline: macOS code signing bypass, Windows timeout, embedded cross-compilation

### Added
- All-features CI testing (cargo test + clippy with full feature set)
- CODEOWNERS for automated review assignment
- Branch protection ruleset for main

### Changed
- Desktop devtools disabled by default (opt-in via feature flag)
- CSP tightened with script-src restriction
- Embedded builds exclude keyring feature (environment-based credentials)

## [0.0.6] - 2026-03-10

- Fix embedded cross-compilation by adding Cross.toml with OpenSSL pre-build

## [0.0.5] - 2026-03-10

- Enable macOS and embedded builds in release workflow

## [0.0.4] - 2026-03-10

- Initial multi-platform release pipeline (Linux, macOS, Windows, embedded ARM)

## [0.0.3] - 2026-03-09

- Frontend build fixes and Tauri desktop integration

## [0.0.2] - 2026-03-09

- Core library stabilization and test infrastructure

## [0.0.1] - 2026-03-08

### Added

- Core foundation: error handling (ZeniiError with thiserror), TOML config, SQLite database with WAL mode and migrations
- Memory system with FTS5 full-text search and sqlite-vec vector embeddings
- Security policy enforcement with autonomy levels (supervised/autonomous/strict) and rate limiting
- 11 built-in agent tools: websearch, sysinfo, shell, file read/write/list/search, patch, process, learn, skill_proposal
- AI agent with rig-core supporting 18 providers (OpenAI, Anthropic, Google, Ollama, and more)
- HTTP + WebSocket gateway with axum (74 routes)
- Soul/Persona system with 3 identity files (SOUL/IDENTITY/USER.md) and dynamic prompt composition
- Skills system with bundled + user markdown skills loaded into agent context
- Progressive user learning with SQLite-backed observations, category filtering, and privacy controls
- CLI with 8 command groups (daemon, chat, run, memory, config, key, provider, schedule)
- Shell completions for bash, zsh, fish, and PowerShell via clap_complete
- Svelte 5 SPA frontend with shadcn-svelte, Tailwind CSS v4, and paraglide-js i18n
- Tauri 2 desktop app with system tray, close-to-tray, and window state persistence
- Secure credentials via OS keyring with zeroize memory protection
- Messaging channels: Telegram, Slack, Discord with lifecycle hooks (feature-gated)
- Cron scheduler with automated recurring tasks and notification push (feature-gated)
- Context-aware agent with 3-tier adaptive context injection (Full/Minimal/Summary)
- Self-evolving framework with skill proposals and human-in-the-loop approval
- Cross-platform build system with Docker-based cross-compilation
- CI/CD pipeline with GitHub Actions (PR checks, multi-platform releases)
- Quality gates: workspace lints, cargo audit, banned pattern detection
- Comprehensive documentation: CLI reference, API reference, configuration guide, deployment guide, development guide
