Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 31 additions & 20 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

## [0.2.1] - 2026-10-07

A patch release for activeagent 1.9, whose generations can pause to ask the
user and resume with the answer.

### Added

- **`HasContext#resuming_generation?`** answers whether a generation resumes
one that paused for user input: true when the agent defines a public
`resuming?` that returns true, or after `self.resuming_generation = true`.
The writer is for a host that replays a stored conversation itself. Both
are private, so neither becomes one of the agent's actions.

### Fixed

- **`HasContext` skips persisting the response of a generation paused for
user input, and the prompt of the generation that resumes it.** A response
answering `awaiting_input?` with true is returned untouched: no generation
record, no assistant row and no tool rows, because its last message is an
unfinished turn. The paused generation's prompt, the user turn, is still
persisted. The resumed generation skips prompt persistence, because its
prompt replays that turn, and persists its response as usual. Both checks
are duck-typed, so framework releases without a pause behave as before.

- Tool messages are now deduped by `tool_call_id` within one response's
stack as well as against rows already on the context, so a stack that
repeats a call persists it once even when the context's `messages` scope
cannot see rows written earlier in the same pass.

## [0.2.0] - 2026-08-18

### Added

- **`SolidAgent::Records::*` — behavior for the agent-configuration records.**
Expand Down Expand Up @@ -40,28 +71,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- **`CHANGELOG.md`**, which the gemspec already advertised.

- **`HasContext#resuming_generation?`** answers whether a generation resumes
one that paused for user input: true when the agent defines a public
`resuming?` that returns true, or after `self.resuming_generation = true`.
The writer is for a host that replays a stored conversation itself. Both
are private, so neither becomes one of the agent's actions.

### Fixed

- **`HasContext` skips persisting the response of a generation paused for
user input, and the prompt of the generation that resumes it.** A response
answering `awaiting_input?` with true is returned untouched: no generation
record, no assistant row and no tool rows, because its last message is an
unfinished turn. The paused generation's prompt, the user turn, is still
persisted. The resumed generation skips prompt persistence, because its
prompt replays that turn, and persists its response as usual. Both checks
are duck-typed, so framework releases without a pause behave as before.

- Tool messages are now deduped by `tool_call_id` within one response's
stack as well as against rows already on the context, so a stack that
repeats a call persists it once even when the context's `messages` scope
cannot see rows written earlier in the same pass.

- `SolidAgent.context_class`, `message_class` and `generation_class` had no
consumers while the shipped initializer template told hosts to set them, so
uncommenting it did nothing. `HasContext#infer_class_names` now reads them.
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
solid_agent (0.2.0)
solid_agent (0.2.1)
activeagent (>= 1.0.0)
activemodel (>= 7.0)
activerecord (>= 7.0)
Expand Down
2 changes: 1 addition & 1 deletion lib/solid_agent/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module SolidAgent
VERSION = "0.2.0"
VERSION = "0.2.1"
end
Loading