Commit Graph
41 Commits
Author SHA1 Message Date
Raven ScottandCursor ef50ad1cb6 refactor(platform): extract JSON export mesh mixins to shared factory
Regenerate dedicated *-json-mixin.js modules via pearcord-json-export-mixin
with platform-correct _shouldGossip* names. Fix bot registry and webhook
execute gossip wiring; export webhookJsonMixin alias; remove dead bot-json-mixin.
Behavior unchanged; partition heal and mesh dedupe paths restored.

Co-authored-by: Cursor <[email protected]>
2026-06-03 09:27:10 -04:00
Raven Scott f85cf2d1c5 feat(platform): platform-wide polls and scheduled messages (Phase 674)
Add polls-scheduling mixin with guild+DM createPoll/votePoll/closePoll and
schedule APIs, gossip dedupe, partition heal, unified view fields, and poll
question search indexing.
2026-06-02 22:18:43 -04:00
Raven ScottandCursor 2271419f8d Wire voice note staging, view draft field, and mesh gossip.
Integrate pearcord-voice-notes with stage/discard/commit APIs, permission
gates, and voiceNoteDraft in view payloads for composer UI parity.

Co-authored-by: Cursor <[email protected]>
2026-06-02 15:31:24 -04:00
Raven ScottandCursor efca048c2f Add strict pearcord module dependency guards for platform imports.
This introduces CI-enforced checks that compare index.js pearcord-* requires against declared dependencies and smoke-resolve imported modules, preventing undeclared module regressions in local file-link and attached runtime environments.

Co-authored-by: Cursor <[email protected]>
2026-06-02 09:27:52 -04:00
Raven ScottandCursor 48e8b70d98 Declare DM voice runtime dependency for platform module graph integrity.
Add the missing `pearcord-dm-voice` local dependency so Bare-based attached/headless agentctl sessions can resolve platform imports reliably, and document the stabilization in the platform README for future module-graph maintenance.

Co-authored-by: Cursor <[email protected]>
2026-06-02 07:58:53 -04:00
Raven ScottandCursor 9994564bc4 Wire guild audit sidecar, msg-index migration, and presence vector sync.
GUILD_SYNC.auditSidecar replicates export cursors; exportAuditSidecar IPC;
PRESENCE_VECTOR_SYNC on settings mesh; view auditSidecar and read receipt rows.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:54:33 -04:00
Raven ScottandCursor 881bc0b62e feat(sync): ACK halt, gossip outbox, and swarm wire helpers (v0.8.603)
Track per-peer GUILD_SYNC_ACK watermarks and stop owner burst pushes when
joiners catch up. Queue guild gossip when the mesh has zero peers and flush
on peer join. Add member/message LWW on GUILD_SYNC ingest, mod fallback sync
push, optional zlib bundles, sync health progress/bytes, and diagnostics export.

Co-authored-by: Cursor <[email protected]>
2026-06-01 18:08:25 -04:00
Raven ScottandCursor 8447204162 feat(sync): delta GUILD_SYNC bundles and guild-replicator integration
Filter bundles by joiner syncWatermark, gossip GUILD_SYNC_ACK after ingest,
append outbound messages to Hypercore via pearcord-guild-replicator, and
export channelCoreKeys in GUILD_SYNC payloads when cores exist.

Co-authored-by: Cursor <[email protected]>
2026-06-01 17:54:13 -04:00
Raven ScottandCursor ff246ea7a2 feat(webhooks): channel webhook CRUD, execute, and audit integration
Wire pearcord-webhooks for local token posts, view.guildWebhooks, gossip
sync, and webhook author display names on messages.

Co-authored-by: Cursor <[email protected]>
2026-05-23 16:53:31 -04:00
Raven ScottandCursor ccedd20edf feat(log): platform session and guild load spans
Wire pearcord-log for ready(), session startup, loadGuild, and openGuild
with stale-load warnings and structured errors.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:02:53 -04:00
Raven ScottandCursor 1d8e700bd1 feat(search): guild index, mesh fanout, thread filter, companion readOnly (v0.8.86)
Integrate pearcord-search GuildSearchIndex with incremental message indexing.
Add searchGuildMessagesWithMesh via MESSAGE_SEARCH_REQUEST/RESPONSE gossip.
Expose searchMeshMeta, threadsPanelFilter, readOnly, and companionMode in view.
setThreadsPanelFilter, setSearch includeMesh, and block sends in read-only mode.

Co-authored-by: Cursor <[email protected]>
2026-05-22 08:02:52 -04:00
Raven ScottandCursor aae2a51cd1 feat(platform): Phase 111 relay plugins, digest summary, prerelease tag
- digestRelayPlugins on GUILD_SYNC; apply active plugin to relay handoff
- Hook failure digest summary channel post on mesh push
- Worker announce channelTag; dry-run relay preview for digest-relay hooks

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:19:31 -04:00
Raven ScottandCursor 13a4b69b7c feat(platform): integration workers, hook editor APIs, receipt retention
Add pearcord-integration-worker templates, PearcordIntegrationWorker class,
createIntegrationWorker/buildIntegrationWorkerScript, receipt retention
get/set, and emit app-event on bot bridge for local worker subscriptions.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:44:42 -04:00
Raven ScottandCursor c4b46d63e9 feat(platform): dispatch automation hooks and record P2P delivery receipts
Wire pearcord-delivery-receipts to run enabled hooks on every APP_EVENT and
bot-bridged messageCreate. Successful deliveries gossip APP_EVENT_RECEIPT;
view exposes automationDelivery stats for server settings UI.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:39:41 -04:00
Raven ScottandCursor 41a0adf295 feat(automations): export/import manifest and GUILD_SYNC hooks slice
Wire pearcord-automation-export: list/upsert/delete hooks, exportAutomationManifest,
importAutomationManifest, mesh gossip ingest, and automationHooks in view().

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:20:15 -04:00
Raven ScottandCursor 23a1c999d6 feat(automations): APP_EVENT fanout and createAppListener
Wire pearcord-app-events on guild open: bridge bot payloads, fanout channel
permission and custom-role changes, gossip APP_EVENT to mesh, and expose
view.appEvents snapshot for debugging.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:15:08 -04:00
Raven Scott 5c4b6c1ed4 feat(platform): GUILD_SYNC channel meta + SEND_MESSAGES enforcement
Bundle channelSettings (description + slowmode) and all topic-bearing channel
types in GUILD_SYNC; ingest into ChannelDescriptionStore on peer join. Push
mesh sync after topic/description edits. _participationMask applies channel
overwrites for send, voice join, and view.canPostInActiveChannel.
2026-05-22 03:02:43 -04:00
Raven Scott 30f27c515a feat(platform): per-channel permission overwrites (Phase 82)
Integrate pearcord-channel-permissions: list/upsert/delete overwrites,
channel-effective _hasPerm/_myPermissions, GUILD_SYNC bundle, and mesh
ingest handlers. Requires MANAGE_CHANNELS on the active channel to edit.
2026-05-22 02:56:26 -04:00
Raven Scott ad99fa78f9 feat(platform): channel topic/description with description sidecar
Wire pearcord-channel-meta: setChannelTopic updates channels + gossip;
setChannelDescription uses ChannelDescriptionStore (always initialized in
ready()) while slowmode stays in HyperDB. Ingest remote CHANNEL_SETTINGS
into the sidecar. view().activeChannelSummary uses buildChannelSummary.
2026-05-22 02:45:09 -04:00
Raven ScottandCursor 05bfce0955 feat(platform): activityFeed view, setActivity, and presence gossip
Wire pearcord-activity buildActivityFeed into view(), extend setPresence and
add setActivity for Now Playing. Friend list rows include activity field.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:37:23 -04:00
Raven ScottandCursor 893f518045 feat(platform): server folders in view and user-prefs CRUD
Wire pearcord-server-folders into PearcordPlatform: createServerFolder,
assignGuildToFolder, collapse/rename/delete, and buildServerRailLayout on
view() as serverRail with folderColors. Persist via updateUserPrefs
serverFolders and emit user-prefs after saves.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:27:28 -04:00
Raven ScottandCursor 22de3514ca feat(platform): custom guild roles and permission editor integration (v0.8.31)
Wire pearcord-guild-roles for create/update/delete roles, member assignments,
_hasPerm enforcement, GUILD_SYNC role bundles, and view.guildCustomRoles for UI.

Co-authored-by: Cursor <[email protected]>
2026-05-22 01:48:30 -04:00
Raven ScottandCursor b8badff7b1 feat(platform): guild voice soundboard upsert, play, and view state (v0.8.21)
Integrate pearcord-soundboard: stage WAV attachments, upsert/remove registry rows,
gossip SOUND_UPSERT/SOUND_PLAY, playSoundboardSound with voice-plane injection,
remote play ingest on guild-sound-play, and expose guildSounds/recentSoundPlays
on platform.view(). Depends on pearcord-soundboard file dep.

Co-authored-by: Cursor <[email protected]>
2026-05-22 00:19:46 -04:00
Raven ScottandCursor 7635295cfb feat(platform): forum archive search and show-archived toggle (v0.8.20)
Add searchForumPosts, setForumIncludeArchived, forum search scope in
_resolveSearchResults (fix channel db.get with guildId), guild search thread
titles, and pearcord-forum-search dependency.

Co-authored-by: Cursor <[email protected]>
2026-05-22 00:13:51 -04:00
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 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 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 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 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 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 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
Pearcord dc38423a91 chore: publish pearcord-platform from pearcord workspace 2026-05-21 20:51:54 -04:00