# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0] - 2025-11-10

### BREAKING CHANGES

#### Removed Deprecated Event Variants

The `MessagePartAdded` event variant has been removed from the `Event` enum. This variant was part of the old streaming system and has been replaced by the new ACP-style `SessionUpdate` event.

**Migration Guide:**

If you were using `MessagePartAdded`, you should migrate to using `SessionUpdate` instead:

**Old code:**
```rust
match event {
    Event::MessagePartAdded { session_id, message_id, part } => {
        // Handle message part
    }
    // ...
}
```

**New code:**
```rust
match event {
    Event::SessionUpdate { session_id, update } => {
        match update {
            SessionUpdate::UserMessageChunk { message_id, content, .. } => {
                // Handle user message content
            }
            SessionUpdate::AgentMessageChunk { message_id, content, .. } => {
                // Handle agent message content
            }
            SessionUpdate::AgentThoughtChunk { message_id, content, .. } => {
                // Handle agent thinking/reasoning
            }
            SessionUpdate::ToolCall { message_id, tool_call, .. } => {
                // Handle tool call initiated
            }
            SessionUpdate::ToolCallUpdate { message_id, tool_call_id, tool_call, .. } => {
                // Handle tool call updates
            }
        }
    }
    // ...
}
```

**Key Differences:**

1. `SessionUpdate` uses typed `ContentBlock` instead of generic `MessagePart`
2. Updates are categorized by type (user/agent/thought/tool)
3. Better separation of concerns for streaming content
4. Aligns with Agent-Client Protocol (ACP) standards

**What This Means:**

- The protocol now uses a unified streaming model via `SessionUpdate`
- Better alignment with ACP specification
- Clearer separation between message lifecycle events and streaming updates
- More structured content representation with `ContentBlock`

### Added

- `SessionUpdate` event variant with ACP-style streaming updates
- `SessionUpdate` enum with variants:
  - `UserMessageChunk`: User message content streaming
  - `AgentMessageChunk`: Agent message content streaming
  - `AgentThoughtChunk`: Agent reasoning/thinking streaming
  - `ToolCall`: Tool call initiated
  - `ToolCallUpdate`: Tool call status/content updates
- `ContentBlock` enum for structured content representation
- `ToolCall` type with status tracking and metadata

### Changed

- Streaming events now use `SessionUpdate` instead of `MessagePartAdded`
- Version bumped from 0.1.0 to 0.2.0 (breaking change)

## [0.1.0] - 2025-11-09

### Added

- Initial protocol definition
- `Event` enum with session, message, connector, and system events
- `Session` and `SessionMetadata` types
- `Message`, `MessageMetadata`, `MessageRole`, `MessageStatus` types
- `MessagePart` enum for message content
- OpenCode adapter for translating OpenCode events to Dirigent protocol
- REST adapter for converting REST API responses
- Comprehensive test suite
