Changelog

Release history for AVA, newest first. Version numbers are the contract — release dates are omitted by policy. Every release ships with the full automated test suite green (2,500+ tests as of v1.8.0), plus type-check, lint, and production-build gates.

Feature availability and configuration details for the current release are documented in configuration.md and white-label.md; system requirements in requirements.md.


v1.8.0 — Engineer console

Slash commands, internal notes, and in-chat tools for engineers. The client chat page is unchanged. For a walkthrough with screenshots, see engineer-console.md.

  • Slash commands and ⌘K on one command list. Type / in the reply box for a ranked, keyboard-driven command menu (↑/↓, Enter/Tab, Esc). Built-ins: /draft, /rewrite <tone>, /wrapup, /transfer, /status, /priority, /note, /ticket, /history, /device, /summarize, /help. The ⌘K palette offers the same commands. Commands that can't run right now are greyed out with the reason.
  • Commands stay out of the conversation. A draft that starts with / is always handled as a command and never sent to the client; start a message with // to send text that begins with /.
  • Snippet shortcuts. Canned responses can have a /shortcut (team-wide or personal; a personal shortcut takes precedence for its owner) and {{placeholders}} such as {{firstName}} and {{ticketNumber}}. A placeholder that can't be filled must be edited before the message sends.
  • Internal notes. A "Reply | Internal note" toggle (⌘⇧X / Ctrl+Shift+X) switches the composer to an amber Note mode with its own draft. Notes are shown to your team as cards, posted live to the AutoTask ticket as Internal Only notes (AUTOTASK_NOTE_PUBLISH_INTERNAL, default 1; live sync can be turned off with AUTOTASK_SYNC_INTERNAL_NOTES=false), and included, labelled, in the close-time transcript note. Notes are never shown to the client — not in the chat, emails, the client-facing AutoTask note, the resolution field, the time entry, or any AI text written for the client.
  • Ticket fields in the chat. The context panel's Ticket card shows the live AutoTask status and priority and lets the engineer change them after an explicit confirmation (also via /status and /priority), and tells the engineer if the ticket was changed in AutoTask meanwhile. Priority editing requires all four AUTOTASK_PRIORITY_P1..P4 to be set and distinct. The Complete status is reserved for wrap-up (AUTOTASK_COMPLETE_STATUS_ID, default 5). Changes are limited per engineer per minute (TICKET_WRITE_RATE_LIMIT_PER_MIN, default 10). A new Contact card offers Call, Email and Copy.
  • Lifecycle header. A progress indicator (Queued → Accepted → Responding → Wrap-up → Closed), time in chat, and a "client waiting" reply clock; an Intake card with the triage summary, possible duplicate tickets and "Find similar resolutions"; compact activity rows (accepted, transferred, status and priority changes).
  • AI for engineers. /draft suggests a reply, /rewrite rephrases your draft (professional, friendly or concise), /summarize shows a private recap, and wrap-up gains Draft all with AI. Suggestions are always reviewed before sending. AI text written for the client is based only on the conversation the client can see.
  • AI usage limits. Per-chat and per-engineer-hour limits (AI_MAX_CALLS_PER_SESSION, default 30; AI_MAX_CALLS_PER_ENGINEER_PER_HOUR, default 60; 0 disables), one running request per command, and an [ai-usage] log line per call with token counts and no content, so you can track spend.
  • White-label ticket links. AutoTask ticket links in the dashboard come from AUTOTASK_WEB_URL or are derived from your zone URL. Without a usable address, ticket numbers render as plain text.
  • Keyboard. Alt+↑/↓ switches between active chats (Alt+Shift+↓ jumps to the next unread), / focuses the composer, and ? lists every shortcut and command. Reply and note drafts and the Note mode are kept per chat, so nothing typed for one client follows you to another.
  • Upgrade notes: one additive database column (applied automatically on start). Before go-live, confirm AUTOTASK_NOTE_PUBLISH_INTERNAL is an Internal Only value on your AutoTask instance, and check whether any AutoTask workflow rule emails contacts on status/priority changes or new notes — see autotask-setup.md.

v1.6.3 — Platform hardening

  • Dependencies updated across the stack, with automated dependency auditing in CI.
  • Uploads: request-size pre-check, verification that a file's content matches its type, a per-instance disk quota, and automatic retention cleanup; the upload budget, quota and retention are configurable (UPLOAD_*).
  • Real-time layer: tighter payload-size and rate limits.
  • Container and edge: read-only root filesystem with dropped capabilities, log rotation on all services, HSTS, hidden server version headers, and a tighter Content-Security-Policy in the shipped nginx template.
  • Configuration: proxy-header trust is opt-in (NGINX_TRUSTED_PROXY), reCAPTCHA verification always applies in production, startup checks on secret strength and config-file permissions, and outbound support/feedback/ report email addresses must be configured explicitly (SUPPORT_FALLBACK_EMAIL is required — no vendor default).
  • Less client personal information in server logs (identifiers only; device hints removed from page URLs after capture).

v1.6.2 — Inline attachment previews + survey filtering

  • Image attachments preview inline on the client chat page.
  • Survey results page: clickable rating-distribution bars filter the response list, and the Rating column is sortable.

v1.6.1 — Attachments, device card and enrichment refinements

  • Engineers reviewing closed sessions in Archives can open their attachments, and attachments open correctly in a browser that holds both a client chat and an engineer login.
  • Upload allowlist extended with zip, txt, csv, and heic (size cap unchanged).
  • Device card layout improved: long identity strings (serial, AV product, IPs, OS, last user) render full-width with no truncation; the context rail widens on large screens.
  • NinjaOne ticket enrichment (configuration-item attach + device UDF) is now gated behind a single explicit switch, NINJAONE_ENRICH_TICKETS (default off), with a documented pre-flight check to run against your own AutoTask instance before enabling.
  • Faster error reporting when AutoTask rejects a request as invalid (no pointless retries).

v1.6.0 — NinjaOne device-at-a-glance

  • Read-only device card in the engineer context panel: identity header, stat tiles (last boot, disk, AV, patches, IPs, system, last user), alerts strip, confidence indicator, and an Open-in-NinjaOne deep link.
  • Three-layer device resolution (link hints → AutoTask configuration-item lookup → NinjaOne API cross-check) with a strict never-guess, identity-gated matching policy.
  • Optional best-effort AutoTask ticket enrichment: attach the matched configuration item and record the device UID, with overwrite guards.
  • NinjaOne access is OAuth2 client-credentials, strictly read-only (GET-only client), and fully off when credentials are unset.

v1.5.0 — White-label configuration layer

  • Tenant branding module: all client-facing identity (company name, logo, phone, portal link, tagline, welcome message) is environment-driven — see white-label.md.
  • Business-hours copy and display timezone (DISPLAY_TZ) are configurable and flow through the client page, transcripts, greetings, and billing drafts.
  • AI prompts templated with a configurable company profile, so triage and summaries speak with the deploying MSP's identity.
  • Startup validation requires only the AI provider key matching the configured LLM_FAST/LLM_QUALITY models.
  • Major internal restructuring (socket server, dashboard state, closure flow) for maintainability, plus a rebuilt buyer-facing documentation set.

v1.4.x — Engineer UX overhaul

v1.4.0

  • Transcript redesign: message grouping, day dividers, client-presence liveness header, and optimistic send with delivery acknowledgment and retry — a message is never silently dropped.
  • Ticket closure moved from a modal into an in-rail wrap-up panel with autosaved drafts; time entries handle sessions that span midnight.
  • Queue upgrades: live wait timers, urgency aging, density toggle, and a standby screen; command palette (⌘K) and keyboard-shortcut help; archives search.
  • Design-system pass: unified priority and avatar components, consistent type scale, refreshed dark theme, and dashboard toast notifications.

v1.4.1

  • Ticketless-session recovery: if ticket creation fails at chat start (for example, an unrecognized email domain with no catch-all company configured), the close flow retries full ticket creation, and engineers get an explicit confirm-to-close-without-sync escape hatch.
  • Clear "no ticket" indicators on affected sessions and a gentle nudge on the client form toward business email addresses.

v1.4.2

  • Cleanup release: dead routes, components, and dependencies removed; production image significantly smaller; concurrent-session limit made env-tunable (MAX_ACTIVE_SESSIONS); PII masking in AutoTask lookup logs.

v1.3.x — Dashboard redesign, canned responses, TLS automation

v1.3.0

  • Engineer dashboard redesign: icon rail navigation, secondary panel with live queue search and priority filtering, profile menu (availability, theme, feedback, sign-out), and collapsible client-context sections.
  • Canned responses: team-wide and per-engineer saved replies, a /-triggered picker in the reply box, and a dedicated management page.

v1.3.1

  • Visual refinements to the new rail (brand gradient, compact monogram tile).
  • Server-authoritative chat availability: a public availability endpoint keeps the client page in sync with the server's business-hours gate.

v1.3.2

  • Automated TLS certificate renewal: the bundled certbot service runs a continuous renew loop and nginx gracefully reloads to pick up renewed certificates — WebSocket connections survive the reload. No manual certificate maintenance required.

v1.3.3

  • Reliability: live chats stay assigned when an engineer has the dashboard open in several tabs, a closure can't be submitted twice, session-ownership checks are stricter, and client chat credentials are kept out of URLs.
  • AutoTask: create requests are not retried after a timeout, so a slow AutoTask response cannot produce duplicate tickets, notes or time entries; company matching prefers exact/subdomain matches over substrings.
  • Business hours became fully env-configurable (BUSINESS_HOURS_TZ/OPEN/CLOSE/DAYS) with validate-and-fallback, alongside env-configurable AutoTask role IDs.
  • Survey submissions are tied to the chat's own session, AI inputs are length-capped, and reCAPTCHA verification has a timeout.

v1.2.0 — Provider-agnostic AI layer

  • All AI call sites moved to the Vercel AI SDK behind a single model factory: choose Anthropic, OpenAI, Google Gemini, or OpenRouter per role via LLM_FAST / LLM_QUALITY.
  • Triage uses schema-validated structured output — malformed model responses degrade gracefully to a safe fallback instead of failing the chat.

v1.1.0 — Analytics dashboard

  • New analytics page: chat volume, pickup / first-reply / resolution times (average, median, p90), CSAT, and per-engineer and per-organization leaderboards.
  • Selectable 7-day / 30-day / 90-day / custom date ranges, backed by a query index added for reporting performance.

v1.0.x — Foundation and stabilization series

The initial production line: real-time client chat with queueing, AI triage, AutoTask ticket lifecycle (create, notes, time entries, close), Microsoft Entra ID engineer sign-on, and email fallback. Patch releases v1.0.1–v1.0.12 consolidated it into a stable baseline. Notable items across the series:

  • Security and stability pass: input validation and rate limiting on the public chat page and the real-time layer.
  • AutoTask resilience: automatic retry on transient 5xx responses, note descriptions truncated to the API field limit, and the note-visibility (publish) value made configurable — it is a per-instance AutoTask picklist, never a safe hardcode.
  • Runtime configuration moved fully out of the repository onto the deployment host.
  • Triage prompt tuned so the AI summary reads naturally both on the dashboard and inside the engineer's greeting to the client.

Did this page help you?