feat: support custom message ids#40
Open
varin-nair-factory wants to merge 3 commits into
Open
Conversation
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
lukealvoeiro
approved these changes
May 20, 2026
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.
Summary
Custom message IDs can now be supplied through both
run()andsession.stream(), letting SDK callers correlate their own IDs with the user message echoed by the daemon. The SDK validates caller-provided IDs before sending an RPC, while omitted IDs continue to be assigned by the daemon as before.What changed
messageIdto message options and forwards it throughdroid.add_user_message.MessageIdSchema: strings only, non-empty after trimming, and at most 512 characters.messageIdfields so message ID rules stay consistent.messageIdinDroidClient.addUserMessage()instead of parsing the full message payload, avoiding extra work for large images, files, or structured output schemas.run()andsession.stream()custom IDs.DroidMessageType.Assistantevent.Usage
run():session.stream():Invalid values (empty, whitespace-only, longer than 512 characters, or non-string) reject before any
add_user_messageRPC is sent.Validation
npm run typechecknpm testnpm run lintnpm run format:checknpm run typecheck:examples