Add ChatEvent in quartz/nipC7Chats with support for kind 9 chat
messages and q-tag based replies per the NIP-C7 specification.
Wire up rendering in NoteCompose and NoteMaster (ThreadFeedView).
https://claude.ai/code/session_01BmAMHBCRKXG612i6zrhhP4
Replace the file-listing style with a UrlPreviewCard-like layout
showing nsite host URL, title, description, and optional favicon.
Remove path rendering and unused string resources.
https://claude.ai/code/session_01XTmqQ9QatUA7aPCWt7NHNt
Add protocol support and UI rendering for NIP-87 which defines ecash
mint discovery via three event kinds: MintRecommendationEvent (38000),
CashuMintEvent (38172), and FedimintEvent (38173).
https://claude.ai/code/session_01JR2nFVPjPGG9jTV4Qq2PUW
Add Quartz protocol support for NIP-5A Pubkey Static Websites with
RootSiteEvent (kind 15128) and NamedSiteEvent (kind 35128), including
tag parsers for path, server, title, description, and source. Wire up
rendering in NoteCompose and ThreadFeedView to display site metadata.
https://claude.ai/code/session_01XTmqQ9QatUA7aPCWt7NHNt
Add support for NIP-7D thread events with title rendering in both
NoteCompose (feed view) and ThreadFeedView (detail view). Replies
use existing NIP-22 kind 1111 comments.
https://claude.ai/code/session_01MR2hLpmq3pkzzT11t86dAt
Changes memberPubKey() to memberPubKeys() returning a list of all p tags
in RelayAddMemberEvent and RelayRemoveMemberEvent. Updates renderers to
display multiple members. Adds NIP-43 event rendering to ThreadFeedView
(NoteMaster) alongside NoteCompose.
https://claude.ai/code/session_01PRqe4bBCb9u62oPh8u9sHx
- Extract private log() helper in JVM and iOS PlatformLog to reduce
copy-paste branching
- Fix JVM formatter to be private and non-nullable
- Convert 60+ interpolated Log.w/e/i calls to lambda overloads,
including hot-path Filter.kt toJson() and LocalCache event processing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Defers string construction until after the level check, avoiding
allocation when debug logging is filtered in release/benchmark builds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add optional throwable parameter to d() and i() across all platforms
- Add inline lambda overloads for all log levels to defer message
construction, avoiding string allocation when level is filtered
- Restore VoiceMessagePreview to pass throwable directly
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set Log.minLevel based on BuildConfig.DEBUG in Amethyst.kt init
- Set Log.minLevel = DEBUG in Desktop Main.kt
- Migrate VideoCompressionHelper to quartz Log + LogLevel enum
- Migrate VoiceAnonymizer, VoiceMessagePreview, LiveStatusIndicator to quartz Log
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the NIP-60 specification for cashu-based wallets with four event types:
- CashuWalletEvent (kind:17375) - replaceable wallet definition with encrypted mints/privkey
- CashuTokenEvent (kind:7375) - unspent cashu proofs with NIP-44 encrypted JSON content
- CashuSpendingHistoryEvent (kind:7376) - transaction history with encrypted tag array
- CashuMintQuoteEvent (kind:7374) - optional mint quote state with NIP-40 expiration
Follows the same structural patterns as the NIP-88 polls implementation.
https://claude.ai/code/session_018UfHPzrQCAFMwB1zB1ftDM
- Replace 6 regex operations in Url.removeDotSegments() with simple
string operations (startsWith/indexOf) using a when-expression
- Remove regex-based dropLastSegment() in favor of StringBuilder with
lastIndexOf
- Extract duplicated hex/octal/decimal parsing in DomainNameReader
into shared parseNumericLiteral() helper
- Deduplicate scheme matching by unifying findValidScheme* methods
into findSchemeSuffix() using regionMatches (avoids lowercase allocation)
- Extract readPath() validity check into isPathValid() to remove
duplicated 5-line condition
- Extract trySchemeNoSlashesOrUserPass() from readScheme() to
eliminate duplicated branch logic
- Restructure readCurrent() with when-expression and extract
resetDomainCounters() helper
https://claude.ai/code/session_017oGieyaUiLCxehNJ5aMFDK