Any guild member may contribute boosts via personal slots (not Manage Guild).
Extract _gossipGuildBoostState for shared gossip after add/contribute. Expose
myBoostSlots on view for server settings UI (used, remaining, canContribute).
Co-authored-by: Cursor <[email protected]>
Before inserting a remote hub mirror, check announcementHub.isDuplicateMirror
for the source messageId and record markMirrored after a successful insert.
Prevents duplicate 📡 mirror lines when ANNOUNCEMENT_HUB_POST is received twice.
Co-authored-by: Cursor <[email protected]>
platform.ready() no longer awaits Hyperswarm discovery/contacts or guild
mesh join before returning. Local identity and guild list restore in ~ms;
_finishSessionStartup() runs meshes in the background and emits session-ready.
Co-authored-by: Cursor <[email protected]>
Default storagePath via pearcord-identity resolveStoragePath(). Mark storage
on ready/register so identity persists across pear run restarts.
Co-authored-by: Cursor <[email protected]>
Attribute boosts to the acting user, gossip GUILD_BOOST_LEDGER_APPEND, and
ingest ledger rows from peers. guildBoost view includes ledger array.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-announcement-hub: setAnnouncementHubPublish,
subscribeRemoteAnnouncementHub, _publishAnnouncementHub on send,
_ingestAnnouncementHubPost from discovery gossip, and view fields for UI.
Depends on pearcord-announcement-hub via file: for local dev.
Co-authored-by: Cursor <[email protected]>
Initialize sticker registry per guild, upsertGuildSticker with Hyperdrive
staging, readStickerImage previews, gossip ingest, and expose
guildStickers in platform.view() for the composer picker.
Integrate PearcordBoosts with lazy module init, gossip ingest on
guild-boost, addGuildBoost/setGuildBoostBannerColor/getGuildBoost with
Manage Guild permission checks, audit guild.boost entries, and expose
guildBoost in platform.view() for UI accents and server settings.
Mirror announcement posts to configured text channels via P2P gossip,
per-user follow with announcement notifications, server settings APIs,
and view fields for UI.
Co-authored-by: Cursor <[email protected]>
Integrate ScreenShareHub on guild voice init, broadcast frames over mesh,
auto-stop on voice leave, startScreenShare/stopScreenShare APIs, and
screenShare snapshot in view().
Co-authored-by: Cursor <[email protected]>
Forward VoiceMediaHub audio-frame events to guild.sendVoiceMedia so live
Opus/pcm frames fan out to all peers in the voice channel. Emit voice-media
on audio activity for UI refresh.
Co-authored-by: Cursor <[email protected]>
Integrate pearcord-automod: pre-send check in _sendPlainMessage,
setAutomodConfig/getAutomodConfig with MANAGE_GUILD gate, P2P gossip
handler, automodConfig in view(), and _ensureGuildModules() so forum,
stage, and automod initialize on loadGuild/join/create paths.
Co-authored-by: Cursor <[email protected]>
Integrate pearcord-stage with voice occupancy: joinStageChannel sets
audience/speaker roles and auto-mutes audience; requestStageSpeak,
approveStageSpeaker, demoteStageSpeaker with STAGE_SPEAKER_UPDATE gossip.
Clear stage role on voice leave. View exposes stageRolesByChannel,
myStageRole, and stagePendingRequests. Include stage in voice occupancy
snapshots.
Co-authored-by: Cursor <[email protected]>
Add _assertSlowmodeFor and _recordSlowmodeFor so createForumPost rate-limits on
the forum channel id before switching into the post thread. Include forum
channels in channelSettings snapshot for header slowmode badge.
Co-authored-by: Cursor <[email protected]>
Create forum posts as threads with starter messages, gossip channel create/
update, audit forum.post.create, and expose sorted forumPosts when a forum
channel is active. Block typing on forum channels.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-step-up into bootstrap and view snapshot (stepUpPinSet,
stepUpUnlocked). Add setStepUpPin, verifyStepUpPin, clearStepUpPin, and
_assertStepUp before moderation and bot-admin APIs. Depends on pearcord-step-up.
Co-authored-by: Cursor <[email protected]>
When marking a DM channel read, fan out CHANNEL_READ on the DM mesh.
Expose dmPeerReadAt and dmReadByUser on view() for Seen UI.
Co-authored-by: Cursor <[email protected]>
Extend guild typing for thread channels (v0.6.6 Phase 20).
- _buildThreadTypingByParent for sidebar typing pills on thread rows
- view.threadTypingByParent with displayNames per active thread
- Block sendMessage in archived threads (_assertChannelWritable)
- signalTyping no-op when active thread is archived
- Reuse memberNameById for voice + thread typing maps
Co-authored-by: Cursor <[email protected]>
Add setDiscoveryFilter() and expose filteredPublicListings,
discoveryFilter on view() for Explore UI and autonomous smokes.
Co-authored-by: Cursor <[email protected]>
Pass customStatus through to PearcordPresence.setStatus so IPC and
contacts.broadcastPresence can sync status text to friends.
Co-authored-by: Cursor <[email protected]>
Extend PearcordPlatform for v0.6.3 social realtime polish.
- setPresence also contacts.broadcastPresence()
- listContacts enriches accepted friends with presence/customStatus
- _guildTyping map (5s TTL) + _onGuildTyping from guild typing event
- signalTyping fans out to DM and guild.gossipTyping in guild mode
- view() typingUsers: member names in guild, peer id in DM
- friend-presence IPC event for UI status dots
Co-authored-by: Cursor <[email protected]>
_initDmSession with Hyperswarm keypair, gossip group channel on create,
view fields dmIsGroup and dmParticipantIds.
Co-authored-by: Cursor <[email protected]>
stageGuildEmojiImage on __emoji__ channel, upsertGuildEmoji with image blob,
gossip ATTACHMENT_META with EMOJI_UPSERT, readEmojiImage for UI IPC.
Co-authored-by: Cursor <[email protected]>