Skip to content

Atmosphere 4.0.54

Choose a tag to compare

@github-actions github-actions released this 13 Jun 14:43
Immutable release. Only release title and notes can be modified.

Added

  • Rich human-in-the-loop approval payloads. A reviewer can now resolve a tool
    approval with more than approve/deny: approve-with-edited-arguments (the
    tool runs with the reviewer's arguments) or respond (the reviewer answers on
    the tool's behalf — structured JSON or free-form text — and the tool does not
    run). Wire protocol: /__approval/<id>/approve {"arguments":{…}} and
    /__approval/<id>/respond {…}. Fail-safe: a malformed edited-args payload denies.
    Session-scoped in-memory (not crash-durable). The legacy boolean resolution path
    is unchanged.
  • Eval flywheel. JournalDatasetPromoter turns a recorded CoordinationJournal
    interaction into an EvalCase dataset row (trace→dataset), and SampledLiveScorer
    grades a configurable fraction of live turns into EvalRun verdicts (online
    scoring). Both are wired into EvalController with admin REST routes
    (/api/admin/evals/dataset, /dataset/promote, /score).
  • OAuth on-behalf-of credential vault. OAuthOnBehalfOfCredentialStore is a
    concrete CredentialStore that performs an RFC 8693 token exchange — swapping a
    user's stored subject token for a short-lived access token scoped to a downstream
    tool, so an agent calls external APIs as the user. Fail-closed (no token →
    no fallback credential), token-cached until expiry. Opt in with
    atmosphere.ai.identity.oauth-obo.enabled=true.
  • Realtime voice bridge. VoiceBridge + the RealtimeVoiceProvider SPI bridge
    client audio frames over the existing WebSocket broadcaster to a speech-to-speech
    provider, fanning synthesized audio (Content.Audio) and transcripts back to the
    client. A dependency-free LoopbackVoiceProvider ships as the runnable reference
    (echoes audio); OpenAI Realtime / Gemini Live providers implement the same SPI.
  • Content-safety moderation guardrail. ModerationGuardrail blocks turns
    whose request and/or response is flagged for hate / harassment / self-harm /
    sexual / violence / illicit content, on the existing fail-closed guardrail
    pipeline. Pluggable detector: zero-dep RuleBasedModerationDetector (default)
    or cross-runtime LlmModerationDetector. Fail-closed by default (a detector
    outage blocks the turn; .failOpen() is the explicit opt-out). Opt in with
    atmosphere.ai.guardrails.moderation.enabled=true
    (...detector=llm for the model tier).
  • Self-healing structured output. @AiEndpoint(structuredOutputRetries = N)
    (or the ai.structured.retry request-metadata key on the AiPipeline path)
    re-prompts the model with the schema-validation error as feedback when a typed
    response fails to parse, up to N extra attempts, then fails closed. Works
    identically on the websocket and channel-bridge paths.
  • OpenAPI → governed tools. OpenApiToolImporter turns an OpenAPI 3.x spec
    (JSON or YAML, with local $ref resolution) into ToolDefinitions whose
    executor performs the HTTP call. The imported operations ride the same
    policy-admission and plan-and-verify path as hand-written @AiTool methods;
    approvalForWrites routes mutating verbs through the HITL gate.
  • MCP client depth. McpClientOptions adds per-server tool filtering and
    display-only renaming (the executor still calls the server's original tool
    name), plus elicitation/sampling callback handlers advertised during
    initialize. McpServerRegistry aggregates several servers into one
    collision-free tool list (first-wins) and owns their lifecycle.