You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracking feature parity between rs-sdk and the TS SDK implementation. Checked items are implemented and tested. Open items are planned for future releases. Reference: TS SDK v0.9.0.
Server one-shot tag emission (has_sent_common_tags)
Client one-shot tag emission (has_sent_discovery_tags)
Server learns client caps (OR-assign, never downgrade)
Client learns server caps
Tag composition order: base → discovery → negotiation
CEP-41: Open-Ended Streaming
support_open_stream tag + supports_open_stream capability flag (emitted, parsed, OR-learned both ways)
No new kind, frames ride kind 25910 in notifications/progress (cvm.type == "open-stream"); stream supplements the final response (one tools/call → live stream + normal result)
SDK Compliance Tracker
Tracking feature parity between rs-sdk and the TS SDK implementation. Checked items are implemented and tested. Open items are planned for future releases. Reference: TS SDK v0.9.0.
CEP Support
CEP-4: Encryption Support
EncryptionModeenum (Optional / Required / Disabled)GiftWrapModeenum (Optional / Ephemeral / Persistent)support_encryptiontag emitted and parsedsupport_encryption_ephemeraltag emitted and parsedparse_discovered_peer_capabilities()CEP-6: Server Announcements (kinds 11316-11320)
set_announcement_extra_tags()/set_announcement_pricing_tags()AnnouncementManagerorchestrator (synthetic MCP requests, automated publish on start)InitializeResult(protocolVersion, capabilities, serverInfo) — currently onlyServerInfoCEP-8: Payments
captags for capability pricing (['cap', 'tool:name', '100', 'sats'])pmitags for payment method identifiersnotifications/payment_required/payment_accepted/payment_rejectedresolvePricecallback with waive/reject/quote)CEP-17: Relay List Metadata Discoverability
rtag constantrtagsdiscoveryRelayUrlsconfig optionfallbackOperationalRelayUrlsconfig optionCEP-19: Ephemeral Gift Wraps
GiftWrapModeenum (Optional / Ephemeral / Persistent)isGiftWrapKindAllowed()enforcementsupport_encryption_ephemeraltagCEP-22: Oversized Payload Transfer
support_oversized_transfertag constant definedoversized_enabledfrom config (currently hardcodedfalse)CEP-23: Server Identity Profile Metadata
PROFILE_METADATA_KIND = 0constantProfileMetadatatype (name, about, picture, banner, website, nip05, lud16)publishProfileMetadata()on server startprofileMetadataconfig optionCEP-35: Discovery Tags & Capability Learning
PeerCapabilities/DiscoveredPeerCapabilitiesstructshas_single_tag()/get_discovery_tags()/learn_peer_capabilities()has_sent_common_tags)has_sent_discovery_tags)CEP-41: Open-Ended Streaming
support_open_streamtag +supports_open_streamcapability flag (emitted, parsed, OR-learned both ways)notifications/progress(cvm.type == "open-stream"); stream supplements the final response (onetools/call→ live stream + normal result)cvmcodec)OpenStreamConfig+ builder on both transports (defaultfalse, opt-in;max_total_timeout_msknob)OpenStreamSession(impl Stream): ordered delivery, out-of-order buffering, UTF-8/byte/chunk capsOpenStreamWriter(mutex writes + separateAtomicBoolabort) +OpenStreamRegistry(admission, dup-token rejection, router)#[from]intocore::Error)RouteSnapshotflush; inbound interception + response deferral + keepalive sweepreset_timeout_on_progress) +call_tool_stream()→ToolStreamCallprogressToken)SDK Behaviors Beyond CEPs
Server Transport
initialize/notifications/initializedalways allowedis_announced_serverbroadcast_notification()to all clientssweep_stale_routes)isPubkeyAllowed(pubkey)callbackisCapabilityExcluded(exclusion)callback(message, ctx, forward)injectClientPubkeyintorequest.params._metainjectRequestEventIdintorequest.params._metaClient Transport
etagetagserverPubkeyaccepts npub / nprofile (currently hex only)onEventCreatedpre-publish hook (register correlation before publish)withTimeout()on decrypt / sign / publish operationsgetServerInitializeName(),getServerToolsListEvent(), etc.)Gateway
start()/stop()lifecycleannounce()delegates to transportserve_handler()(rmcp integration)Relay Management
RelayPoolTrait)publishEventToRelayUrls()for bootstrap relay publicationEncryption & NIPs