Skip to content

v1.7.0

Choose a tag to compare

@inureyes inureyes released this 03 May 18:11

Sessions menu, External Connectors (Email + Calendar), multi-agent @mention, governance Phase B, generate_image tool, and 100+ fixes.

Backend.AI GO v1.7.0

171 commits since v1.6.1. (143,498 lines added, 6,356 lines deleted)

New Features

Sessions Management

  • Sessions menu rolls out to production with full Active / History / Diagnostics tabs available on every build .
  • SessionsService consolidates LLM, diffusion, squad-agent, and history lifecycle events into one observable surface, exposed via Tauri commands and matching REST handlers .
  • Active tab with sortable / filterable DataTable, table & card view toggle, and terminate-vs-delete semantics with starting / terminal-state guards .
  • History tab with paginated list, delete actions, and persistence so terminated sessions are recorded across restarts .
  • Session detail drawer reusing the model-card pattern, plus a Diagnostics tab with PID, health, uptime, and a bounded 200-entry scrollable log list — full API parity (sessions_get_diagnostics Tauri + GET /api/v1/sessions/{id}/diagnostics REST); api_key is never exposed .
  • Accessible column sorting on the shared DataTable (per-column sortable / accessors / comparators / default direction; aria-sort for WCAG 2.1 SC 1.3.1; keyboard activation; stable sort) .
  • Session-alias rename UI when multiple instances of the same model are loaded; multi-session model display in chat & selection surfaces .

External Connectors Platform

  • Email (SMTP/IMAP) as the first external connector — IMAP read adapter, SMTP write adapter Stages 0-6, end-to-end docs .
  • Calendar (Google Calendar) as the second connector — backend foundation, governance integration, Settings UI alignment with Email .
  • Connector governance hook API + thin interceptor .
  • Finalized connector audit trail schema with canonical_serialize and redactedFields, SQLite-backed ConnectorAuditStore, redaction pass, and retention policy .
  • Content-addressed blob storage for rollback snapshots .
  • Connector audit log page with one-click undo per row, plus an in-app toast carrying an undo action immediately after a connector write .
  • Undo intent taxonomy and orchestration through the connector registry; affordances on notifications, audit rows, and agent cards .
  • Channel bot tokens migrated to the OS credential vault; channel capability class declared for governance; channel messages now emit ConnectorAuditEntry rows .
  • Retention-to-blob deletion handoff for ContentAddressed snapshots; credential-bearing params.body content redacted before truncation .

Multi-Agent @mention Collaboration

  • Foundation: message and agent-run data model extensions for mentions, parent run chains, and forwarded messages .
  • @mention autocomplete in the chat input with profile picker and inline chip preview .
  • Main-agent orchestration and task delegation service routing @mention requests to sub-agent profiles .
  • Mention chip rendering in user messages and assistant sub-agent attribution on reply bubbles .
  • Real-time execution status UI for mention chips and chat — live run progress, stall, and error states .
  • No-mention continuity (last responder retains the turn) and parallel mention dispatch .
  • Polish pass — header relabel, i18n strings, docs, integration validation .

Personal Governance & Policy (Phase B)

  • Policy-triggered approval prompt with inline policy edit from the approval dialog .
  • Policy surface in Settings .
  • Governance events emitted on guardrail and limit rule changes .
  • IANA timezone names supported for limit day-boundary calculations .

Models, Agent Tools, and Chat

  • New generate_image agent tool for LLM-autonomous image creation, wired to the existing Draw / sd-server stack .
  • Recommended utility-model registry as a single source of truth for memory-extraction and title-generation models, with on-demand auto-load, lifecycle toasts, onboarding suggestion, and Settings UI to pick extraction & title models independently .
  • Per-session preserve_thinking override with tri-state UI in the Chat Parameters Drawer .
  • thinking_budget_tokens and preserve_thinking support for Qwen models .
  • Models page table view backed by the shared ViewModeToggle .
  • Bench harness for memory-extraction and title-model output quality .

Server, Distribution, and UI Foundations

  • aigo-server manpage and headless .deb packaging for Linux server deployment .
  • Sidebar header unified with the main toolbar (macOS traffic-light fix included) .
  • Streaming audit-row scan for collect_live_store_refs so very large audit stores no longer block on full materialization .

Improvements

  • Email read action contexts thread GovernanceHint::Silent through invoke_with_governance for full parity with Calendar .
  • First-class metadata slot on OperationResult for connector-specific receipt data .
  • Settings: align Email and Calendar connector design under the same layout .
  • Refresh whitelisted default models for cloud providers .
  • Serialize utility LLM calls (memory extraction, title generation) via a promise-chained queue to prevent slot contention with the active chat .
  • Models menu no longer surfaces running models — moved to the header status pill and Sessions UI .
  • Multi-session aliases align after router suffixing so /v1/models and selectors stay coherent across reloads ( follow-up).
  • Memory extraction notification now explains why 0 entries were saved (no new facts, parse failure, validation failure, all duplicates) instead of an opaque "0 saved" .
  • Unify router endpoint resolution for Tauri commands and REST handlers via RouterEndpointResolver trait .
  • Make GGUF arch validation permissive with improved failure errors .
  • Email connector UI + adapter polish .
  • Wrap connector credentials in zeroize-on-drop SecretString .
  • Squad Overview activity grid + timeline integration and UI polish .
  • Align policies rule drawer with the canonical Drawer layout .
  • Migrate governance UI raw elements to common components .
  • Use fs4 for cross-platform disk space detection in engine commands .
  • Codify before_state vs undo_token precedence in connectors-trait.md for connector authors .

Bug Fixes

  • Loaded MLX/local models in the main model selector display the same name as the router/Continuum dropdown instead of "Model.safetensors" .
  • Use named exports for date-fns v4 locale loaders — fixes Cannot access 'es' before initialization startup crash that prevented v1.7.0-beta.3 from running .
  • Strip · port {port} · {n}k ctx suffix from SessionSummary.displayName for LLM-serving sessions to avoid duplicating columns .
  • Sessions: complete i18n, accessibility, and responsive QA pass .
  • Providers: sync router and enrich selected_models on Refresh .
  • Stabilized unified Sessions runtime identities and lifecycle history; encoded/validated session history filenames defensively .
  • Ensure terminated sessions appear in the History tab .
  • Cancel in-flight tool execution on cowork stop signal; Cowork stop button actually halts the running task .
  • Sub-agent tool approval dialog surfaces in the chat surface so runs no longer stall .
  • Sub-agent approval prompts no longer surface in the wrong chat session when the user switches sessions; switching sessions no longer leaves approval-waiting sub-agents stalled .
  • Scope sub-agent approval surface to the active chat session so approvals don't leak across sessions .
  • Sub-agent retains its prior reply when the user sends a no-mention follow-up, preventing repeated clarifying questions .
  • Parallel fetch_url calls no longer block when approved with remember=false .
  • Headless file and event APIs hardened for permission and lifecycle edge cases .
  • Epic 1047 agent tools hardening pass .
  • Complete node registration pairing flow .
  • Address epic 2759 review gaps and headless gating .
  • Memory extraction empty-reason surfacing in chat UI notification + Rust diagnostic logging under memory::extraction .
  • Title-generation prompt, validation, retry behavior unified with the recommended utility model; parseBareModelId applied; Qwen3-specific /no_think prefix removed; memory extraction serialized before title generation .
  • Title generation no longer races memory extraction for the local single-completion slot .
  • Title generation no longer injects the Qwen3-specific /no_think control token into prompts for other model families .
  • Sub-agent run hangs after spawn — reject the literal default model alias to recover .
  • Resolve @mention delegation failures for the Main Agent and built-in profiles; complete delegation follow-ups; flip autocomplete popover when clipped by the viewport .
  • Stabilize Hugging Face download manager: delete, retry, cancel/retry race, and queue persistence .
  • Chat memory extraction persists saved memories and the UI distinguishes success and failure outcomes .
  • Detect token exhaustion inside reasoning blocks via request config .
  • MLX capability detector identifies audio/video on multimodal Qwen3.5/3.6 models; fall back to chat_template.jinja for tool-calling detection .
  • Close email governance and rollback gaps .
  • Enter Tokio runtime context before spawning the retention scheduler so make dev no longer panics in the AppKit delegate .
  • Strip MLX quantization suffix (-4bit, _4bit, .4bit, etc.) in Rust alias derivation so model aliases match the TypeScript frontend .
  • Capture per-chunk undo ids and propagate all-failed across channel multi-chunk sends .
  • Stabilize download queue height with max-3-item constraint and smooth transitions .
  • Forward top_k, min_p, frequency_penalty, presence_penalty, repeat_penalty, and seed over the Unix-socket transport — six sampling fields were silently dropped for all socket-backed models on macOS .
  • Context-window indicator no longer drops to 0% between multi-turn replies for socket-backed (macOS MLX / llama-server) models .
  • Wire LimitAction::RequireApproval to the approval dialog; address governance and limits follow-up gaps .
  • Epic post-merge review — security, validation, i18n, and correctness .
  • Use sidecar lock file for squad memory writes .

CI/CD Improvements

  • Copy src-tauri/benches into the Dockerfile.server build context so the headless image actually builds.
  • Add aigo-container-cli to setup and dev dependency chains .
  • Drop unused DEBIAN/conffiles so dpkg-deb succeeds.
  • Fix 21 cargo clippy --all-targets lint errors across 13 files .
  • Copy src-tauri/crates into the Docker rust-builder stage.
  • Connector rollback integration coverage for snapshot path and governance approval round-trip .
  • Credential vault round-trip on macOS / Windows / Linux .

Technical Details

  • Multi-session router refactor: internal pools, port allocators, crash monitors, and unload surfaces now keyed by session_id instead of model alias. A dual-emit window keeps the old alias-keyed event payloads for one release alongside the new session-id payloads to ease frontend migration. The /v1/models endpoint emits per-session suffixed aliases so multiple instances of the same model coexist cleanly .
  • Unified Sessions treats public session IDs as canonical UUIDs only — loaded-model, diffusion, squad, history, and REST /loaded DTOs require sessionId; legacy empty/composite/path-like IDs no longer accepted .
  • Codify before_state vs undo_token precedence in connectors-trait.md .
  • First-to-second connector retrospective covering Wave 1 → Wave 3 .

Dependencies

  • Update mlxcel to 0.0.25.
  • Update continuum-router to 1.5.6 (also 1.5.5 via; 1.5.3 and 1.5.2 over the v1.7.0 cycle).

Breaking Changes

  • Models menu is now a pure catalog: the "Currently Loaded" section, port/uptime display, and per-card unload affordances at the page level have been removed. Loading still works the same way; runtime and session state is surfaced in the header status pill, in chat, and in the Sessions menu (/sessions). Unloading remains available through the header status pill popover and the model settings drawer (, completes epic).
  • Unified Sessions requires canonical UUID session IDs: loaded-model, diffusion, squad, history, and REST /loaded DTOs require sessionId; legacy empty/composite/path-like IDs are no longer accepted .
  • Multi-session router keys by session_id: internal pools, port allocators, crash monitors, and unload surfaces moved from model-alias keying to session_id keying, with a one-release dual-emit compatibility window for event payloads .

Known Issues

None.

Full Changelog

Full Changelog: v1.6.1...v1.7.0