Skip to content

Releases: VoltAgent/voltagent

@voltagent/core@2.6.10

16 Mar 21:12
e1958fb

Choose a tag to compare

Patch Changes

  • #1155 52bda94 Thanks @omeraplak! - fix: capture provider-reported OpenRouter costs in observability spans

    What's Changed

    • Forward OpenRouter provider-reported cost metadata to both LLM spans and root agent spans.
    • Record usage.cost and usage.cost_details.upstream_inference_* attributes for downstream cost consumers.
    • Document OpenRouter usage accounting and custom onEnd hook-based cost reporting in the observability docs.

@voltagent/ag-ui@1.0.6

16 Mar 21:12
e1958fb

Choose a tag to compare

Patch Changes

  • #1149 19c4fcf Thanks @corners99! - fix: use input instead of args for tool-call parts in message conversion

    When converting CopilotKit assistant messages with tool calls to VoltAgent format,
    the adapter was setting args on tool-call parts. The AI SDK's ToolCallPart
    interface expects input, causing the Anthropic provider to send undefined as
    the tool_use input — rejected by the API with:

    "messages.N.content.N.tool_use.input: Input should be a valid dictionary"

@voltagent/core@2.6.8

10 Mar 00:12
a1b68cc

Choose a tag to compare

Patch Changes

  • #1146 c7b4c45 Thanks @omeraplak! - Improve structured-output error handling for Agent.generateText when models do not emit a final output (for example after tool-calling steps).
    • Detect missing result.output immediately when output is requested and throw a descriptive VoltAgentError (STRUCTURED_OUTPUT_NOT_GENERATED) instead of surfacing a vague AI_NoOutputGeneratedError later.
    • Include finish reason and step/tool metadata in the error for easier debugging.
    • Add an unhandled-rejection hint in VoltAgent logs for missing structured outputs.

@voltagent/server-core@2.1.9

06 Mar 05:00
cb0803d

Choose a tag to compare

Patch Changes

  • 99680b1 Thanks @omeraplak! - feat: add runtime memory envelope (options.memory) and deprecate legacy top-level memory fields

    What's New

    • Added a preferred per-call memory envelope:
      • options.memory.conversationId for conversation-scoped memory
      • options.memory.userId for user-scoped memory
      • options.memory.options for memory behavior overrides (contextLimit, semanticMemory, conversationPersistence)
    • Kept legacy top-level fields for backward compatibility:
      • options.conversationId, options.userId, options.contextLimit, options.semanticMemory, options.conversationPersistence
    • Legacy fields are now marked deprecated in type/docs, and envelope values are preferred when both are provided.

    Usage Examples

    Legacy (still supported, deprecated):

    await agent.generateText("Hello", {
      userId: "user-123",
      conversationId: "conv-123",
      contextLimit: 20,
      semanticMemory: {
        enabled: true,
        semanticLimit: 5,
      },
      conversationPersistence: {
        mode: "step",
        debounceMs: 150,
      },
    });

    Preferred (new memory envelope):

    await agent.generateText("Hello", {
      memory: {
        userId: "user-123",
        conversationId: "conv-123",
        options: {
          contextLimit: 20,
          semanticMemory: {
            enabled: true,
            semanticLimit: 5,
          },
          conversationPersistence: {
            mode: "step",
            debounceMs: 150,
          },
        },
      },
    });

    Server and Resumable Stream Alignment

    • @voltagent/server-core now accepts/documents the options.memory envelope in request schemas.
    • Resumable stream identity resolution now reads conversationId/userId from options.memory first and falls back to legacy fields.
    • Added tests for:
      • parsing options.memory in server schemas
      • resolving resumable stream keys from options.memory
  • Updated dependencies [99680b1]:

    • @voltagent/core@2.6.6

@voltagent/server-core@2.1.10

06 Mar 18:45
13f5a9e

Choose a tag to compare

Patch Changes

  • #1141 faa5023 Thanks @omeraplak! - feat: add per-call memory read-only mode via memory.options.readOnly.

    When readOnly is enabled, the agent still reads conversation context and working memory, but skips memory writes for the current call.

    What changes in read-only mode:

    • Conversation message persistence is disabled.
    • Step persistence/checkpoint writes are disabled.
    • Background input persistence for context hydration is disabled.
    • Working memory write tools are disabled (update_working_memory, clear_working_memory).
    • Read-only tool remains available (get_working_memory).

    @voltagent/server-core now accepts memory.options.readOnly in request schema/options parsing.

    Before

    await agent.generateText("Summarize this", {
      memory: {
        userId: "user-123",
        conversationId: "conv-456",
      },
    });
    // reads + writes memory

    After

    await agent.generateText("Summarize this", {
      memory: {
        userId: "user-123",
        conversationId: "conv-456",
        options: {
          readOnly: true,
        },
      },
    });
    // reads memory only, no writes
  • Updated dependencies [faa5023, 0f7ee7c]:

    • @voltagent/core@2.6.7

@voltagent/resumable-streams@2.0.2

06 Mar 04:59
cb0803d

Choose a tag to compare

Patch Changes

  • 99680b1 Thanks @omeraplak! - feat: add runtime memory envelope (options.memory) and deprecate legacy top-level memory fields

    What's New

    • Added a preferred per-call memory envelope:
      • options.memory.conversationId for conversation-scoped memory
      • options.memory.userId for user-scoped memory
      • options.memory.options for memory behavior overrides (contextLimit, semanticMemory, conversationPersistence)
    • Kept legacy top-level fields for backward compatibility:
      • options.conversationId, options.userId, options.contextLimit, options.semanticMemory, options.conversationPersistence
    • Legacy fields are now marked deprecated in type/docs, and envelope values are preferred when both are provided.

    Usage Examples

    Legacy (still supported, deprecated):

    await agent.generateText("Hello", {
      userId: "user-123",
      conversationId: "conv-123",
      contextLimit: 20,
      semanticMemory: {
        enabled: true,
        semanticLimit: 5,
      },
      conversationPersistence: {
        mode: "step",
        debounceMs: 150,
      },
    });

    Preferred (new memory envelope):

    await agent.generateText("Hello", {
      memory: {
        userId: "user-123",
        conversationId: "conv-123",
        options: {
          contextLimit: 20,
          semanticMemory: {
            enabled: true,
            semanticLimit: 5,
          },
          conversationPersistence: {
            mode: "step",
            debounceMs: 150,
          },
        },
      },
    });

    Server and Resumable Stream Alignment

    • @voltagent/server-core now accepts/documents the options.memory envelope in request schemas.
    • Resumable stream identity resolution now reads conversationId/userId from options.memory first and falls back to legacy fields.
    • Added tests for:
      • parsing options.memory in server schemas
      • resolving resumable stream keys from options.memory
  • Updated dependencies [99680b1]:

    • @voltagent/core@2.6.6

@voltagent/core@2.6.7

06 Mar 18:45
13f5a9e

Choose a tag to compare

Patch Changes

  • #1141 faa5023 Thanks @omeraplak! - feat: add per-call memory read-only mode via memory.options.readOnly.

    When readOnly is enabled, the agent still reads conversation context and working memory, but skips memory writes for the current call.

    What changes in read-only mode:

    • Conversation message persistence is disabled.
    • Step persistence/checkpoint writes are disabled.
    • Background input persistence for context hydration is disabled.
    • Working memory write tools are disabled (update_working_memory, clear_working_memory).
    • Read-only tool remains available (get_working_memory).

    @voltagent/server-core now accepts memory.options.readOnly in request schema/options parsing.

    Before

    await agent.generateText("Summarize this", {
      memory: {
        userId: "user-123",
        conversationId: "conv-456",
      },
    });
    // reads + writes memory

    After

    await agent.generateText("Summarize this", {
      memory: {
        userId: "user-123",
        conversationId: "conv-456",
        options: {
          readOnly: true,
        },
      },
    });
    // reads memory only, no writes
  • #1142 0f7ee7c Thanks @SergioChan! - fix(core): avoid duplicating stdout/stderr stream content in sandbox summary metadata

@voltagent/core@2.6.6

06 Mar 05:00
cb0803d

Choose a tag to compare

Patch Changes

  • 99680b1 Thanks @omeraplak! - feat: add runtime memory envelope (options.memory) and deprecate legacy top-level memory fields

    What's New

    • Added a preferred per-call memory envelope:
      • options.memory.conversationId for conversation-scoped memory
      • options.memory.userId for user-scoped memory
      • options.memory.options for memory behavior overrides (contextLimit, semanticMemory, conversationPersistence)
    • Kept legacy top-level fields for backward compatibility:
      • options.conversationId, options.userId, options.contextLimit, options.semanticMemory, options.conversationPersistence
    • Legacy fields are now marked deprecated in type/docs, and envelope values are preferred when both are provided.

    Usage Examples

    Legacy (still supported, deprecated):

    await agent.generateText("Hello", {
      userId: "user-123",
      conversationId: "conv-123",
      contextLimit: 20,
      semanticMemory: {
        enabled: true,
        semanticLimit: 5,
      },
      conversationPersistence: {
        mode: "step",
        debounceMs: 150,
      },
    });

    Preferred (new memory envelope):

    await agent.generateText("Hello", {
      memory: {
        userId: "user-123",
        conversationId: "conv-123",
        options: {
          contextLimit: 20,
          semanticMemory: {
            enabled: true,
            semanticLimit: 5,
          },
          conversationPersistence: {
            mode: "step",
            debounceMs: 150,
          },
        },
      },
    });

    Server and Resumable Stream Alignment

    • @voltagent/server-core now accepts/documents the options.memory envelope in request schemas.
    • Resumable stream identity resolution now reads conversationId/userId from options.memory first and falls back to legacy fields.
    • Added tests for:
      • parsing options.memory in server schemas
      • resolving resumable stream keys from options.memory

@voltagent/core@2.6.5

06 Mar 03:32
4ab51b9

Choose a tag to compare

Patch Changes

  • #1135 a447ca3 Thanks @corners99! - fix(core,ag-ui): guard double writer.close() and RUN_FINISHED after RUN_ERROR

@voltagent/ag-ui@1.0.5

06 Mar 03:32
4ab51b9

Choose a tag to compare

Patch Changes

  • #1135 a447ca3 Thanks @corners99! - fix(core,ag-ui): guard double writer.close() and RUN_FINISHED after RUN_ERROR