Commit Graph
890 Commits
Author SHA1 Message Date
Raven ScottandCursor d14fc164f5 feat(stickers): stage Lottie JSON and pass format to sticker registry (v0.8.18)
stageGuildStickerImage detects Lottie via pearcord-lottie, stores
application/lottie+json attachments, and upsertGuildSticker forwards
image bytes for validateSticker. Supports Phase 52 vector stickers.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:48:30 -04:00
Raven ScottandCursor 0ff4d29ed1 feat(profile): remote peer banner preview over P2P attachment meta (v0.8.17)
Phase 51 — remote profile banners:
- pearcord-profile-assets: embed bannerAttachment on PROFILE_COSMETIC gossip
- _gossipProfileCosmetics enriches payload; _ingestPeerCosmetics ingests meta
- readPeerProfileBannerPreview(userId) + _ensureBannerAttachmentReady
- _prefetchBannerFromPeers for guild mesh byte fallback

Peers can render banner images after cosmetics sync without a central CDN.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:43:37 -04:00
Raven ScottandCursor 8e56c82945 chore: remove accidental self-referential symlink from repo root
The pearcord-platform symlink was created by a mistaken git add and would
break clones; keep only index.js and package.json at module root.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:38:09 -04:00
Raven ScottandCursor b9393ea45c feat(view): expose messageLayout for sticker+text combo bodies (v0.8.16)
Add pearcord-message-layout dependency and messageLayoutKind() so each
message in view() carries messageLayout: text | sticker-only | combo | hub.
Combo rows keep displayContent for caption text while sticker-only and hub
mirrors still clear displayContent for legacy render paths.

Depends on [email protected] for classifyMessageLayout().

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:37:59 -04:00
Raven ScottandCursor 7edc64dc6a feat(platform): profile banner image upload with boost perk gate
Add setProfileBannerImage (512 KB max, upload_cosmetic perk) staging
to Hyperdrive attachments, gossip ATTACHMENT_META, and
readProfileBannerPreview for UI and hub author thumbnails.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:34:09 -04:00
Raven ScottandCursor 3899ff9a7f feat(platform): profile cosmetics save, gossip, and cosmeticsByUserId view
Integrate pearcord-profile-cosmetics with boost perk gates, guild and
contacts fanout, peer cache, profile modal IPC, and mesh join on settings swarm.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:30:28 -04:00
Raven ScottandCursor a8027178c6 feat(platform): rich hub mirror cards on ingest and in view/search
Integrate pearcord-hub-cards: build card on ANNOUNCEMENT_HUB_POST ingest,
hubMirrorJson on insert, enrichMessageRow for UI, hub-only displayContent,
authorAvatarHash in discovery payload, search haystack includes card text.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:25:40 -04:00
Raven ScottandCursor 195fec9026 feat(platform): sticker-only send, validation, view enrich, search
Normalize stickerNames against guild registry, skip automod on empty text,
enrich messages from stickerNamesJson after DB read, sticker-only
displayContent, previewPlaintext for notifications, guild search haystack.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:20:14 -04:00
Raven ScottandCursor 8cec894657 feat(platform): emoji pack APIs and emojisByPack view fields
Expose upsertEmojiPack, removeEmojiPack, guild emoji pack gossip ingest,
and view enrichment (guildEmojiPacks, emojisByPack) for desktop UI.

Co-authored-by: Cursor <[email protected]>
2026-05-21 23:14:28 -04:00
Raven ScottandCursor 45571368a3 feat(platform): contributeGuildBoost for members + myBoostSlots view
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]>
2026-05-21 23:08:50 -04:00
Raven ScottandCursor c5f971a756 fix(platform): skip duplicate announcement hub mirrors on re-gossip
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]>
2026-05-21 23:04:43 -04:00
Raven ScottandCursor 9adffdd408 feat(platform): sticker pack APIs, gossip ingest, and view fields
Add upsertStickerPack, removeStickerPack, and listStickerPacks for mods with
Manage Guild. Upsert stickers accepts optional packName. View exposes
guildStickerPacks and stickersByPack for UI grouping. Pack changes re-gossip
member stickers so peers stay consistent.

Co-authored-by: Cursor <[email protected]>
2026-05-21 22:57:26 -04:00
Raven ScottandCursor 57bed4951b fix(platform): unblock UI by deferring P2P mesh startup after session restore
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]>
2026-05-21 22:53:12 -04:00
Raven ScottandCursor fd4f8a1932 fix(platform): use ~/.config/pearcord default storage + onboarded marker
Default storagePath via pearcord-identity resolveStoragePath(). Mark storage
on ready/register so identity persists across pear run restarts.

Co-authored-by: Cursor <[email protected]>
2026-05-21 22:44:15 -04:00
Raven ScottandCursor ffd405727e feat(platform): record booster on addGuildBoost and sync ledger gossip
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]>
2026-05-21 22:33:59 -04:00
Raven ScottandCursor 7577984266 feat(platform): remote announcement hub publish and ingest (v0.8.5)
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]>
2026-05-21 22:30:52 -04:00
Raven Scott e75ed08dfc feat(platform): wire pearcord-stickers APIs and view.guildStickers
Initialize sticker registry per guild, upsertGuildSticker with Hyperdrive
staging, readStickerImage previews, gossip ingest, and expose
guildStickers in platform.view() for the composer picker.
2026-05-21 22:26:41 -04:00
Raven Scott 881fbfae4b feat(platform): wire DisplayCaptureFeed and ingestDisplayCapture
Attach display capture feed to ScreenShareHub, reset on voice leave/stop
share, and accept base64 JPEG frames from the Pear UI for P2P screen share.
2026-05-21 22:22:17 -04:00
Raven Scott 0ec5bbfe56 feat(platform): wire VoiceCaptureFeed and ingestVoiceCapture API
Attach capture feed to VoiceMediaHub on guild load, reset on voice leave,
and accept base64 PCM chunks from the Pear UI for live microphone send.
2026-05-21 22:17:17 -04:00
Raven Scott 35ee850d17 feat(platform): wire pearcord-boosts APIs and view.guildBoost
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.
2026-05-21 22:14:34 -04:00
Raven ScottandCursor 3f614a5c9c feat(platform): v0.8.0 announcement follow and cross-post
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]>
2026-05-21 22:07:25 -04:00
Raven ScottandCursor d000ac43d6 feat(platform): v0.7.9 screen share start/stop in voice channels
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]>
2026-05-21 22:03:16 -04:00
Raven ScottandCursor dabdaaa7e2 feat(platform): wire voice audio-frame broadcast on guild voice mesh
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]>
2026-05-21 21:59:48 -04:00
Raven ScottandCursor 3eff053cf8 feat(platform): v0.7.7 automod enforcement and guild module bootstrap
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]>
2026-05-21 21:54:57 -04:00
Raven ScottandCursor 52be3813ab feat(platform): v0.7.6 stage channels — join, request speak, mod approve
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]>
2026-05-21 21:50:05 -04:00
Raven ScottandCursor d39a1e6962 feat(platform): v0.7.5 announcement channels — mod-only post and typing gates
Wire CHANNEL_TYPES.ANNOUNCEMENT through channel settings, search, unread,
and view.canPostInActiveChannel. _assertAnnouncementPost() requires
MANAGE_MESSAGES for sendMessage/createForumPost paths; block TYPING_START
for non-moderators. Integrates pearcord-threads isAnnouncementChannel().

Co-authored-by: Cursor <[email protected]>
2026-05-21 21:42:59 -04:00
Raven ScottandCursor 0716dfc692 feat(platform): apply channel slowmode to forum new-post creation (v0.7.4)
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]>
2026-05-21 21:37:37 -04:00
Raven ScottandCursor 165f42e51b feat(platform): forum tags module, palette, filter, and createForumPost tags
Co-authored-by: Cursor <[email protected]>
2026-05-21 21:34:42 -04:00
Raven ScottandCursor 6eca466781 feat(platform): createForumPost API and forumPosts view snapshot
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]>
2026-05-21 21:30:12 -04:00
Raven ScottandCursor 6dadc18c51 feat(platform): gate kick, ban, and bot install tokens behind step-up PIN
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]>
2026-05-21 21:24:24 -04:00
Raven ScottandCursor ab31c97441 feat(platform): gossip DM read receipts on markChannelRead
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]>
2026-05-21 21:16:54 -04:00
Raven ScottandCursor 031b5ffa71 feat(platform): pruneDiscoveryListings wrapper
Expose discovery.pruneStaleListings for future IPC; listing reads
already auto-prune via listPublicListings in view().

Co-authored-by: Cursor <[email protected]>
2026-05-21 21:14:23 -04:00
Raven ScottandCursor 200f2e54b5 feat(platform): setGuildDiscoveryTags and discovery tag filter
Wire discovery tags through platform view and IPC.

- setGuildDiscoveryTags re-announces public listing when listed
- setDiscoveryFilter accepts tag; view.discoveryAllTags
- _refreshDiscoveryAnnouncements includes guild tags

Co-authored-by: Cursor <[email protected]>
2026-05-21 21:12:53 -04:00
Raven ScottandCursor 9d089e2dda feat(platform): thread channel typing hints and archived guards
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]>
2026-05-21 21:10:26 -04:00
Raven ScottandCursor 11b0346e17 feat(platform): discovery filter state in view
Add setDiscoveryFilter() and expose filteredPublicListings,
discoveryFilter on view() for Explore UI and autonomous smokes.

Co-authored-by: Cursor <[email protected]>
2026-05-21 21:07:54 -04:00
Raven ScottandCursor ee460f6ee2 feat(platform): setPresence accepts optional customStatus
Pass customStatus through to PearcordPresence.setStatus so IPC and
contacts.broadcastPresence can sync status text to friends.

Co-authored-by: Cursor <[email protected]>
2026-05-21 21:05:23 -04:00
Raven ScottandCursor 913149cc2a feat(platform): friend presence and guild channel typing in view
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]>
2026-05-21 21:03:46 -04:00
Raven ScottandCursor 7dcb5875ca feat(platform): v0.6.2 createGroupDM and openGroupDM APIs
_initDmSession with Hyperswarm keypair, gossip group channel on create,
view fields dmIsGroup and dmParticipantIds.

Co-authored-by: Cursor <[email protected]>
2026-05-21 20:59:54 -04:00
Raven ScottandCursor 4e9afd18d6 feat(platform): v0.6.1 image guild emoji staging and preview API
stageGuildEmojiImage on __emoji__ channel, upsertGuildEmoji with image blob,
gossip ATTACHMENT_META with EMOJI_UPSERT, readEmojiImage for UI IPC.

Co-authored-by: Cursor <[email protected]>
2026-05-21 20:56:45 -04:00
Pearcord dc38423a91 chore: publish pearcord-platform from pearcord workspace 2026-05-21 20:51:54 -04:00