🦋 New version release - #467
Merged
Merged
Conversation
brentrager
force-pushed
the
changeset-release/main
branch
from
August 18, 2026 19:40
480a0f5 to
294092b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@smooai/smooth-operator@1.52.1
Patch Changes
888cbef: feat(go): client-initiated turn cancellation — Client.Cancel() + MessageTurn.Cancel()
The wire protocol and all five servers already honor the
cancelframe /cancelledevent, but the Go client had no way to send it. Add the missing client surface, mirroring
the TypeScript reference (sdk: client-initiated turn cancellation — SmoothAgentClient.cancel() + MessageTurn.cancel() #459):
Client.Cancel(CancelParams{RequestID, SessionID?})sends thecancelframe.MessageTurn.Cancel()is the ergonomic "stop THIS turn" convenience — it cancels usingthe turn's own requestId + originating sessionId. Fire-and-forget, idempotent.
cancelledevent settles the matching turn as a user-stop: the event isdelivered on
Events(), the channel closes cleanly,Waitresolves WITHOUT an error,and
MessageTurn.Cancelled()reportstrueso a UI tells a user-stop apart from afailure. Errors still go the error path.
cancelis now first-class in theActionTypeset andcancelledin theEventTypeset (with
ServerEvent.AsCancelled()), not stringly-typed.cancelledwith no matching turn, is aharmless no-op.
@smooai/smooth-operator-web-chat-example@0.0.89
Patch Changes
@smooai/smooth-operator-server@1.12.1
Patch Changes
89c5ca7: fix(ts): cancel discards a HITL-parked confirmation so the parked turn drops cleanly
Cancelling a turn parked at a write-confirmation (HITL) freed the slot and emitted
cancelledcorrectly, but the park in
turnRunner.tsawaits a bare deferred fromConfirmationRegistry.register(
const approved = await verdict) that the turn'scancelSignalabort does NOT itself complete. Thecancel path already discarded it via a connection-wide
confirmations.rejectAll(), but that is abroader sweep than the cancel needs.
FrameDispatcher.cancelActiveTurnnow discards precisely the cancelled turn's pending confirmation(
confirmations.resolve(turn.sessionId, false)) after aborting the controller, so the parked awaitunblocks immediately (resolves denied; the result is dropped because the sink is gagged and the slot
is already cleared).
activeTurnnow carries asessionId, stamped where the turn is created in thesend_messagehandler. The disconnect path still rejects every outstanding confirmation separatelyvia
rejectPendingConfirmations, so nothing dangles there. Mirrors the Rust reference dropping theconfirmation future on abort and the .NET fix (dotnet: cancel discards a HITL-parked confirmation so the parked turn drops cleanly #460). No behavior change for a non-parked cancel or
the no-active-turn no-op.
Adds a parity test (mirroring the .NET
CancelUnparkTests) that drives a turn towrite_confirmation_required, cancels it, and assertscancelledis emitted, a laterconfirm_tool_actionreturnsNO_PENDING_CONFIRMATION, the slot is freed (a newsend_messageisaccepted), and no stray events leak from the abandoned turn.