# What changed in ag-ui-protocol

> 22 changes in ag-ui-protocol 0.0 from its official release notes, upgrade guides and advisories: 12 breaking, 9 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/pypi/ag-ui-protocol/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## ag-ui-protocol 0.0

### Breaking changes

- Patch entries are typed operation models rather than dictionaries; read fields with attributes or convert models using model_dump(by_alias=True). (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- BinaryInputContent is no longer a valid content part; messages carrying one are rejected during RunAgentInput validation. Use media parts instead. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Negative max_execution_time values are rejected. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Negative max_iterations values are rejected. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- MetadataMixin is no longer exported; custom models that used it should inherit ConfiguredBaseModel and declare metadata. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- The field is renamed from sub_agents to subagents, and the wire key is subagents; the old field and wire key are not retained. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- A 1.0 producer must declare its protocol version on RUN_STARTED; Python producers pass PROTOCOL_VERSION when constructing the event. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Patch entries are typed operation models rather than dictionaries; read fields with attributes or convert models using model_dump(by_alias=True). (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- SubAgentInfo is renamed to SubagentInfo; the old class name remains exported as an alias for one release. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Python producers must emit REASONING_* events; there is no producer-side compatibility shim for the retired THINKING_* events. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Tool call result content can now be a string or a list of ContentPart values; code that assumes a string must narrow it first. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Tool message content can now be a string or a list of ContentPart values; code that assumes a string must narrow it first. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)

### New APIs and options

- InputContent is renamed to ContentPart; the old name remains exported from ag_ui.core as an alias. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- Content parts gain an optional id field. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- InputContentDataSource is renamed to DataSource; the old name remains exported as an alias. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- PartSource gains a FileSource variant for a provider-issued handle to bytes already uploaded; consumers must not treat its value as a URL. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- ImageInputContent is renamed to ImagePart; the same naming change applies to audio, video, and document parts, and old names remain aliases. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- InputContentSource is renamed to PartSource; the old name remains exported as an alias, and PartSource also gains a FileSource arm. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- TextInputContent is renamed to TextPart; the old name remains exported from ag_ui.core as an alias. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- TextPart gains optional metadata, matching the media parts. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
- InputContentUrlSource is renamed to UrlSource; the old name remains exported as an alias. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)

### Behavior and default changes

- Fields with no value are omitted from JSON instead of written as null; readers checking for absent fields must test whether the key exists. (0.0.0) — [upgrade guide](https://docs.ag-ui.com/migrating-to-1-0)
