v1.4.25
Versus v1.4.25 adds an evidence-backed DevOps/SRE chat workspace for exploring
the systems and data sources connected to Versus. The assistant uses read-only,
resource-oriented tools and reports when evidence or a capability is unavailable
instead of filling gaps with assumptions.
Highlights
- One incident per continuing condition — AI detect mode now coalesces
repeated occurrences of the same error into one durable incident and one
initial notification. An error seen 500 times is reported as 500 occurrences,
not 500 independently paged alerts. - Live detection evidence — incident lists and details show cumulative
occurrence count, last seen, and the highest observed severity. Later
lower-severity events cannot visually downgrade an escalated incident. - DevOps chat workspace — open
/agent/chatto start, resume, cancel, and
delete investigation threads. Responses stream with visible tool progress and
retained evidence. - Broad system discovery — inspect system status, services, incidents,
learned patterns, prior analyses, alert decisions, connected capabilities, and
detection health through generic get/list/search operations. - Grounded context — attach an incident, service, or explicit time range to a
message without restricting the conversation to that entity. - Durable conversations — sessions survive refreshes and process restarts,
and work consistently across multiple replicas when using a CAS-capable shared
backend. - Explicit cancellation — leaving the page does not abort an investigation;
use Stop to cancel the active server-side run. - Capability guidance — unavailable telemetry, runbook, dependency,
reliability, or decision sources are identified explicitly with safe setup
guidance. - Tool catalog and controls — open
/agent/toolsto inspect every Chat and
Analyze tool, see exactly why it is available or unavailable, and control the
two agents independently. - Direct tool guidance — every displayed tool links to its canonical
documentation. Tools with an existing product surface also offer Open tool;
for example,find_runbookopens Runbooks management without a permanent
Runbooks sidebar item. - Durable tool policy — per-agent choices are stored by organization and
shared across replicas when using a CAS-capable storage backend. Disabled
tools are removed from the selected agent's model tool list and new-session
discovery rather than refused after invocation. - Enterprise knowledge — licensed deployments can enrich the same assistant
with SLI/SLO reliability state and bounded alert-fatigue decision provenance.
Detection episodes
AI detect mode now treats repeated observations of one continuing condition as
one detection episode:
- The first anomaly creates one stable incident and sends one initial
notification. - Repeats update the incident's exact cumulative occurrence count and last-seen
time without calling notification providers again. - A higher severity can send one escalation notification while keeping the same
incident ID. On-call starts only if it has not already run for that incident. - Resolving the incident closes the episode. A later recurrence creates a new
incident. - A 10-minute quiet gap also starts a new episode; continuous traffic does not
page again every 10 minutes. - Results no longer depend on source batching. One pull with 500 matching events
and 500 one-event pulls both produce one incident, one initial notification,
and occurrence count 500.
Memory and file storage support single-process episode coordination. PostgreSQL
provides atomic ownership, token-fenced claim renewal, restart persistence, and
multi-replica coordination. PostgreSQL is recommended for high-cardinality or
multi-replica detect workloads.
Enterprise keeps alert-fatigue page count separate from raw occurrence volume.
Proceed, custom divert, suppress, and group outcomes remain explicit, while
high/critical priority floors continue to use primary routing. Same-condition
repeats do not re-enter Enterprise routing after a terminal decision.
Tool catalog
The new Tool catalog remains readable even when agent.enable is false, so an
operator can review requirements before enabling the runtime. Tools are grouped
by domain and report one of these server-resolved states:
- available;
- disabled by the operator;
- needs a license;
- needs a data source;
- needs an integration;
- needs an internal capability;
- configured but unhealthy.
Each unavailable card names the missing requirement, explains what the tool
would use it for, and links to the current setup surface. Health details contain
only bounded source names and safe error classes; hosts, credentials, prompts,
tool payloads, and raw backend errors are not displayed.
Default enabled Versus tools are hidden so the page stays focused on setup and
policy decisions. If a Versus tool is operator-disabled or enters an abnormal
state, its card reappears for recovery. Hidden defaults can be disabled through
the documented Tool catalog API.
Unavailable tools keep a visible, unchecked checkbox in the disabled state, so
the catalog shows both the intended control and why it cannot currently be
changed. Operator-disabled tools whose requirements are satisfied remain
interactive.
Chat and Analyze settings are independent. Enabling a tool whose requirements
are not satisfied is rejected instead of storing an ineffective setting. A
healthy source keeps its tool available when another source of the same kind is
failing; the group becomes unhealthy only when all usable sources have failed.
This release exposes Kubernetes tool entries as availability metadata only. It
does not add Kubernetes inspection, data-source creation or editing, credential
management, or source binding. Those workflows remain separate follow-up work.
Chat now appears in the Respond sidebar group in OSS and Enterprise. Runbooks is
no longer a permanent sidebar item; use Open tool on the find_runbook card
to reach /agent/runbooks. In the documentation site, AI Analyze is a single
page and Tool Reference, Recent Changes, and Find Runbook live under the Tools
group.
Security and operations
- Chat tools remain read-only. Actions are not executed from chat.
- Sessions, tools, reliability data, and alert decisions use the deployment's
organization data scope. - Prompts, answers, tool arguments, tool output, credentials, and raw backend
errors are excluded from Enterprise audit records and operational logs. - Enterprise records bounded create/send/result/cancel/delete audit outcomes.
- Enterprise requires
runtime:manageto change Tool catalog settings and
records boundedagent.tool.changedoutcomes for allowed and denied attempts.
Read-only catalog inspection remains available without that mutation
permission. - Enterprise browser-session mutations now use exact-origin CSRF validation.
Set rootpublic_hostto the externally visible HTTP(S) origin when a
TLS-terminating or Host-rewriting proxy changes the request origin seen by
Versus. The same value owns external links and secure-cookie derivation. - Chat applies process/org-wide and per-session hourly request ceilings. With a
CAS-capable shared backend, the aggregate ceilings are coordinated across
replicas. - Retention is bounded to 100 sessions per organization, 100 turns per session,
and 30 days. Sessions also have a hard encoded-size limit. - Tool availability distinguishes configured sources from adapters that were
actually constructed. Enterprise metric/trace purchase guidance cannot be
bypassed by adding a provider name to configuration, while valid standalone
OSS Prometheus and Tempo tool readers remain usable. - Detection notification claims renew during slow provider fan-out, preventing
a live replica from being replaced after the original lease interval. A crash
after an external provider accepts a notification but before durable completion
remains an at-least-once boundary.
Configuration
Chat inherits the shared agent.ai model configuration by default. Optional
task-specific overrides are available under agent.ai.chat:
agent:
ai:
chat:
model: ""
max_tokens: 0
max_calls_per_hour: 0Empty or zero task fields inherit the corresponding shared AI setting/default.
For licensed deployments behind a proxy, set the shared root config:
public_host: https://versus.example.comThe value must be an absolute HTTP(S) origin only: no path, query, fragment, or
userinfo.
Breaking and upgrade notes
The model-visible Versus tool catalog was consolidated around generic resource
semantics. Integrations or dashboards that match tool names should migrate to:
get_system_overviewlist_servicesget_serviceget_incidentsearch_incidentslist_patternsget_patternlist_analysesget_alert_decisionlist_capabilitiesget_detection_health
The prior recent_incidents, pattern_history, describe_service,
versus_overview, describe_incident, describe_patterns, analysis_history,
capability_status, and detection_health names are removed. The unreleased
question-specific explain_known_status, explain_spam, and
service_objectives names are not part of the release.
Unsafe Enterprise API requests authenticated by a browser session must now send
a matching Origin or Referer. Machine/signature-authenticated ingestion is
unchanged.
The embedded UI upgrades React Router to 7.x, Vite to 8.x, Vitest to 4.x, and
@vitejs/plugin-react to 6.x. Maintainers of downstream UI forks should retest
custom routing, build plugins, and test configuration.
golang.org/x/crypto is upgraded from v0.55.0 to v0.56.0 in OSS and Enterprise.
This resolves reachable SSH channel-deadlock advisories GO-2026-6354 and
GO-2026-6355.
What's Changed
- feat(agent): add shared tools and scoped data foundations by @hoalongnatsu in #351
- feat(agent): add evidence-backed DevOps chat by @hoalongnatsu in #352
- feat(agent): add tool availability controls by @hoalongnatsu in #353
- feat(agent): add the Kubernetes connector by @hoalongnatsu in #357
- feat(agent): coalesce repeated detections into incidents by @hoalongnatsu in #358
- feat(kubernetes): replace topology with node explorer by @hoalongnatsu in #359
- fix(chat): humanize chat answers by @hoalongnatsu in #360
Full Changelog: v1.4.24...v1.4.25