---
title: '0.19'
description: An agent's log stores each message once, so agent sessions from earlier releases don't fold.
---

## Start new agent sessions

0.19 stores each message's content once, in the `ai.control.requested` command
that brought it in. The AI reducers advance to `a2.ai.state.v27`,
`a2.ai.context.v7`, and `a2.ai.control.v6`, and a log written before 0.19
doesn't fold: `reduceAIState()` and `deriveUIMessages()` throw on an
`ai.message.created` that no command explains. Start new agent sessions after
you deploy. Earlier sessions keep their events in history, but their state
can't be read.

## Payloads and types

Code that reads the AI log directly changes with it:

- **`ai.message.created`** records an admission as
  `{ messageId, role, generate? }`, without the message.
  `MessageCreatedPayload` takes no type argument.
- **`ai.control.committed`** carries no message content. Queued inputs and
  `AIState.active.input` are `InputRef`s, `{ id, role, generate, afterStepOf? }`,
  and `ActiveTurn` takes no type argument. `AIState.inbox.items` keep their
  `message`, now with `role`.

## Provider tools under `fx()` and `pi()`

`agent()` throws a `TypeError` when a provider-defined tool
(`type: 'provider'`, such as a provider's web search) is passed with `fx()` or
`pi()`. Before, both harnesses dropped it without a word, so the model never
saw it. Take it out of those agents' `tools`.
