Skip to content

Add prepare_conversation_settings_change for duration, mute, and screen capture - #35

Open
santiagomed wants to merge 28 commits into
cursor/forward-send-876afrom
cursor/conversation-settings-876a
Open

santiagomed wants to merge 28 commits into
cursor/forward-send-876afrom
cursor/conversation-settings-876a

Conversation

@santiagomed

Copy link
Copy Markdown
Contributor

Stacked on #34.

Adds a signer for conversation setting changes, available in every binding:

Setting Event signed Payload extras
message_duration (+ ttl_msec) ConversationMetadataChangeEvent.MessageDurationChange ttl
remove_message_duration …MessageDurationRemove —
mute / unmute …MuteConversation / …UnmuteConversation muted conversation id
enable_screen_capture_blocking / disable_screen_capture_blocking …EnableScreenCaptureBlocking / …DisableScreenCaptureBlocking —

The result is a single ActionSignature, the same shape prepare_message_delete returns. Every field matches the thrift schema in the repo. Mute and unmute follow the native clients: they are signed for the sender's own {sender}:{sender} conversation, with the target conversation listed in the event. Signed changes round-trip through the existing verifier.

API (builder pattern, additive only):

  • Rust: ConversationSettingsParams::new(conversation_id, ConversationSetting::MessageDuration { ttl_msec }) with with_identity. ConversationSetting::from_name parses the names, and a new public signatures::build_action_signature helper is added.
  • Python: prepare_conversation_settings_change(conversation_id, setting, *, ttl_msec=None, sender_id=None, signing_key_version=None)
  • JS: prepareConversationSettingsChange({ conversationId, setting, ttlMsec })
  • Go: PrepareConversationSettingsChange(ConversationSettingsParams{…}) with Setting… constants
  • .NET / JVM: a ConversationSetting enum plus TtlMsec / ttlMsec

Input errors say what to pass:

  • ttl_msec missing, not positive, or set for a setting other than message_duration
  • an empty or unknown setting (the error lists the valid names)
  • an empty conversation id
  • a non-integer ttlMsec (JS)
  • an undefined enum value (.NET) or a null setting (JVM)

Screen-capture detection is not offered, because the native clients never send it.

Docs: docs/API.md gets a table row, a section, and Rust/JS/Python snippets. The example ChatCore wrappers in all six languages get a prepare_settings_change helper.

Tests

  • make ci (fmt, clippy -D warnings, license check, workspace tests): 562 core tests pass, 7 of them new.
  • Bindings: Python 68, JS all suites, Go pass, .NET 85, JVM 68.
  • Examples: Rust 13, Python 14, JS 15, Go pass, .NET 14, JVM 13.
Open in Web Open in Cursor 
santiagomed and others added 27 commits October 14, 2026 23:53
Thread an optional QuickReply through EncryptMessageParams and
EncryptReplyParams into the message content builders, so a quick-reply
request or response sent by the SDK decrypts back to the same public
QuickReply value. Unset keeps the content unchanged.
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ santiagomed
❌ github-actions[bot]
You have signed the CLA already but the status is still pending? Let us recheck it.

@santiagomed
santiagomed added this pull request to stack #43 October 15, 2026 07:37
@santiagomed
santiagomed marked this pull request as ready for review October 15, 2026 07:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants