Commit Graph
546 Commits
Author SHA1 Message Date
Raven ScottandCursor 3cd74e9989 feat(platform): Phase 117 audit CSV mesh push and gossip handlers (v0.8.81)
- pushAuditExportCsvToMesh + _onAuditExportCsvGossip
- Guild listener for audit-export-csv-sync
- exportAuditLog sign path unchanged; mesh uses dedicated RPC 76

Co-authored-by: Cursor <[email protected]>
2026-05-22 07:26:13 -04:00
Raven ScottandCursor 874472732c feat(platform): Phase 116 — audit CSV sign, CSV mesh push, SMTP prefs (v0.8.80)
- exportAuditLog signs CSV; getAuditExportCsvExport; GUILD_SYNC slice
- pushHookFailureDigestCsvToMesh + _onHookFailureDigestCsvGossip
- SMTP relay prefs in UI API; _syncDigestRelaySmtpConfigToPlugin
- relay handoff opts include smtp manifest fields

Co-authored-by: Cursor <[email protected]>
2026-05-22 07:19:12 -04:00
Raven ScottandCursor 9e5390de96 feat(platform): Phase 115 bridges — CSV mesh, archive health, webhook URL (v0.8.79)
- exportHookFailureDigest / getHookFailureDigestCsvExport with signatureValid
- GUILD_SYNC slices: hookFailureDigestCsvExport, archiveHealthPrefs, modDigestGroupDmMeta
- refreshArchivePeerHealth + archive health prefs on guild focus/join/open
- dryRunDigestWebhookRelay + digest relay webhook URL plugin sync
- syncModDigestGroupDmFromMesh for mod digest group DM participant sync

Co-authored-by: Cursor <[email protected]>
2026-05-22 07:11:30 -04:00
Raven ScottandCursor c844d4f200 feat(platform): Phase 114 webhook dry-run, health refresh, GDM mesh meta
- dryRunDigestWebhookRelay and webhook preview on digest-relay hook dry-run
- refreshArchivePeerHealth with persist + GUILD_SYNC mesh push
- syncModDigestGroupDmFromMesh and modDigestGroupDmMeta on GUILD_SYNC bundle
- Signed CSV hook failure digest export with signatureValid
- Ingest mod digest meta for all members; open group DM for mods only

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:58:59 -04:00
Raven ScottandCursor a21685522a feat(platform): mod digest group DM and signed relay handoff posts (v0.8.77)
Add ensureModDigestGroupDmChannel and _postModDigestGroupDmSummary so hook
failure digest mesh sync can post to an auto-created mod group DM without
leaving guild mode. Requires two other moderators (manage guild/channels).

Restore guild session after DM posts. Extend hook failure notify prefs API
for mod digest group DM toggles.

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:37:47 -04:00
Raven ScottandCursor 77936807b4 feat(platform): Phase 112 relay signing and health decay
- Sign relay handoffs with guild-derived secret for webhook/smtp plugins
- Verify signature on getLastDigestRelayHandoff (signatureValid)
- Apply health decay in archive peer picker
- Show signature status in server settings UI

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:27:46 -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 4e55fbcdfe feat(platform): Phase 110 digest-relay dispatch and mesh notify prefs
- Record digest relay handoff before AUTOMATION_DIGEST_EXPORT fanout
- Dispatch automation hooks on digest export (digest-relay action + audit)
- hookFailureDigestNotifyPrefs on GUILD_SYNC and push notifications
- Archive peer picker prefers synced health from archivePeerSeen rows

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:10:58 -04:00
Raven ScottandCursor 4085513530 feat(platform): digest relay, inbox channel post, worker semver gate
Record digest relay handoffs, post digest summaries to configured inbox channels,
validate worker versions on announce, sync digestRelayHandoff on GUILD_SYNC,
and expose getLastDigestRelayHandoff (Phase 109 v0.8.73).

Co-authored-by: Cursor <[email protected]>
2026-05-22 06:01:03 -04:00
Raven ScottandCursor 81a00cfeac feat(platform): digest notify, peer health, worker release audit, health dash
Notify mods on digest export with prefs and AUTOMATION_DIGEST_EXPORT fanout.
Archive peer picker healthScore/healthLabel. automation.worker.release audit on
announce and mesh gossip. getAutomationHealthDashboard and GUILD_SYNC notify prefs.
Phase 108 v0.8.72.

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:46:16 -04:00
Raven ScottandCursor 35b34b0bb7 feat(platform): digest fetch retry and archivePeerSeen guild sync
Refactor fetchAutomationDigestSnapshotFromMesh with exponential backoff
retries mirroring audit archives. Bundle archivePeerSeen on GUILD_SYNC
push and ingest on join. Phase 107 v0.8.71.

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:37:32 -04:00
Raven ScottandCursor 702377b36c feat(platform): digest snapshot mesh fetch and archive peer last seen
Implement fetchAutomationDigestSnapshotFromMesh with waiters, gossip handlers,
scheduled export body gossip, GUILD_SYNC snapshot ingest, listAuditArchiveFetchPeers
lastSeenAt, and _touchArchivePeerSeen on presence/mesh join. Phase 106 v0.8.70.

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:31:54 -04:00
Raven ScottandCursor 7adf714b8a feat(platform): Phase 105 mesh peer indicator and digest export schedule
- listAuditArchiveFetchPeers returns meshConnected per member
- automationDigestExportSchedule timer and snapshot persistence
- GUILD_SYNC slices for schedule and snapshot metadata
- runOverdueAutomationSchedules includes digest export task

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:23:36 -04:00
Raven ScottandCursor 2eb9ece6f0 feat(platform): Phase 104 peer picker, trial matrix, digest export
- listAuditArchiveFetchPeers and targetMemberId on archive mesh requests
- exportAutomationScheduleDigest for schedule + hook failure bundle
- runIntegrationWorkerTrialMatrix across all worker templates
- Template-specific trial event fanout via buildSampleAppEvent

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:09:14 -04:00
Raven ScottandCursor a7be60b702 feat(platform): Phase 103 retry fetch, receipts trial, overdue runs
- fetchAuditExportArchiveFromMesh retries with exponential backoff
- runIntegrationWorkerTrial receipt mode for delivery-tracer template
- runOverdueAutomationSchedules runs due audit export and digest sync

Co-authored-by: Cursor <[email protected]>
2026-05-22 05:03:31 -04:00
Raven ScottandCursor 09b98b0efb feat(platform): Phase 102 archive fetch, dashboard, trial asserts
- fetchAuditExportArchiveFromMesh via RPC 72 request/response waiters
- Respond to audit-export-archive-request when local archive has entries
- getAutomationScheduleDashboard on view state
- runIntegrationWorkerTrial fans out MESSAGE_CREATE and requires sawMessageCreate
- Merge archive ingest resolves pending mesh fetch waiters

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:57:16 -04:00
Raven ScottandCursor a5008a3621 feat(platform): audit archive download and worker install trial (Phase 101)
- exportAuditExportArchive formats stored archive entries for UI modal
- runIntegrationWorkerTrial starts PearcordIntegrationWorker in-process
  briefly to validate template wiring before Pear publish

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:49:10 -04:00
Raven ScottandCursor 3b72fd69e8 feat(platform): Phase 100 audit archives, digest schedule, install plan
- AUDIT_EXPORT_ARCHIVE retention + gossip on exportAuditLog
- digestExportSchedule timer parity with audit export schedule
- fetchWorkerInstallPlan / listAuditExportArchives in guild view
- GUILD_SYNC slices for archives, digest schedule

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:44:44 -04:00
Raven ScottandCursor 563792464d feat(platform): Phase 99 scheduled audit export, digest sync, version diff
- Scheduled audit export timer with GUILD_SYNC auditExportSchedule prefs
- runScheduledAuditExportNow forces export + gossip (+ digest push)
- HOOK_FAILURE_DIGEST_SYNC ingest and pushHookFailureDigestToMesh
- getHookFailureDigest merges mesh snapshot via mergeHookFailureDigests

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:38:48 -04:00
Raven ScottandCursor 91c7da8847 feat(platform): Phase 98 audit export gossip, digest export, worker changelog
- exportAuditLog gossips AUDIT_EXPORT_SNAPSHOT entries to guild mesh
- _onAuditExportSnapshotGossip merges snapshot rows into local audit log
- exportHookFailureDigest with MANAGE_GUILD gate
- announceWorkerRelease accepts releaseNotes; GUILD_SYNC includes releaseNotes

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:32:24 -04:00
Raven ScottandCursor 9fa0db2d3e feat(platform): audit export, hook failure fanout, publish announce fixes (Phase 97)
- exportAuditLog with MANAGE_GUILD gate and formatAuditExport integration
- _fanoutHookFailureEvent dispatches HOOK_FAILURE to other automation hooks;
  skipFanout prevents recursive fanout on nested failures
- Reorder _recordHookFailure so fanout runs before audit/notify and audit errors
  cannot block webhook fanout
- Import categoryAllows for failure hook filtering

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:27:18 -04:00
Raven ScottandCursor 5a77582dbb feat(v0.8.60): audit filters, hook failure digest, worker release hints
- listAuditLog(filter), getHookFailureDigest, announceWorkerRelease
- WORKER_RELEASE_ANNOUNCE gossip ingest + GUILD_SYNC.workerReleaseHint
- appVersion constructor option for update-available comparison
- view: hookFailureDigest, workerReleaseHint, auditLogFilterOptions

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:17:52 -04:00
Raven ScottandCursor c407bc5d55 feat(v0.8.59): per-user hook mute and scoped setHookFailurePrefs
- getHookFailurePrefs returns guildMute, userMute, muteNotifications
- setHookFailurePrefs scope user|guild (guild requires MANAGE_GUILD)
- _notifyHookFailure uses shouldMuteForUser
- view.hookFailurePrefs exposes split mute state for server settings UI

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:11:55 -04:00
Raven ScottandCursor 4c8d177c4b feat(v0.8.58): GUILD_SYNC auditRecent and hook failure mute prefs
- _exportAuditSyncSlice: up to 32 automod/automation/moderation audits
- Ingest auditRecent on GUILD_SYNC; sync hookFailurePrefs
- getHookFailurePrefs / setHookFailurePrefs (MANAGE_GUILD)
- _notifyHookFailure respects muteNotifications
- view.hookFailurePrefs; push GUILD_SYNC after prefs/retention save

Co-authored-by: Cursor <[email protected]>
2026-05-22 04:05:11 -04:00
Raven ScottandCursor 6bf4576439 feat(v0.8.57): automod audit, hook failure alerts, audit gossip ingest
- automod.block audit on _assertAutomod (reason in action label)
- automation.hook.failed audit + HOOK_FAILURE_ALERT gossip on failed hooks
- HookFailureAlertStore wiring, mod MANAGE_GUILD notifications
- Remote AUDIT_APPEND inserts into local audit-log collection
- view.hookFailureAlerts for server settings UI

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:58:49 -04:00
Raven ScottandCursor 2ca61bbc26 feat(platform): delivery metrics API and automod dry-run preview (v0.8.56)
Expose getAutomationDeliveryMetrics, dryRunAutomodMessage with optional
memberRoles, and automationDeliveryMetrics on view for server settings.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:52:14 -04:00
Raven ScottandCursor 58b8cb31af feat(platform): GUILD_SYNC receiptRetention, hook dry-run APIs (v0.8.55)
Include receiptRetention in guild sync bundles and ingest on join. Expose
dryRunAutomationHook and dryRunAllAutomationHooks for server settings
preview without writing delivery receipts.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:48:32 -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 ScottandCursor 11401afe9e feat(permissions): filter guild channels by VIEW_CHANNEL in view()
Hide channels denied via role or channel overwrite from view().channels,
guard selectChannel with memberCanViewChannel, and reassign activeChannelId
to the first visible text channel when the current selection becomes hidden
after loadGuild or permission gossip.

Co-authored-by: Cursor <[email protected]>
2026-05-22 03:11:22 -04:00
Raven Scott 489d5c6a90 feat(platform): enforce voice/stage permissions per channel (Phase 85)
joinVoiceChannel requires CONNECT_VOICE; missing SPEAK_IN_VOICE forces
listen-only. joinStageChannel uses channel-effective MANAGE_CHANNELS for
mods. view().voicePermsByChannel maps connect/speak/listenOnly per channel.
2026-05-22 03:07:32 -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 0513f4df88 feat(platform): upload activity images via Hyperdrive staging
Add setActivityImageFromBytes (256 KB image cap, __presence__ channel) and
readActivityImagePreview for UI thumbnails. Merges large/small image keys
into the current activity and reuses presence enrichment for P2P gossip.
2026-05-22 02:51:19 -04:00
Raven Scott ceddeb42fd feat(platform): enrich presence gossip with activity asset attachments
Async _enrichPresenceActivity resolves large/small image keys via the
local attachments store before PRESENCE_UPDATE broadcast on guild and
contacts meshes. Updates self presence activity after enrichment.
2026-05-22 02:48:31 -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 15f162cd73 feat(platform): threadsPanel view + setThreadsPanelIncludeArchived (Phase 75)
Compute threadLastActivity, root message snippets, and threadsPanel payload
for UI sidebar. Exposes threadsPanelIncludeArchived toggle via channel emit.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:22:41 -04:00
Raven ScottandCursor ab20375f9d feat(platform): navigateDeepLink for invite join and guild routes (Phase 74)
navigateDeepLink handles invite (joinInvite), guild-channel (load +
selectChannel), guild-only, and message kinds. Exposes formatInviteDeepLink
and formatGuildDeepLink for UI copy/share flows.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:18:37 -04:00
Raven ScottandCursor 44e36ee6ac feat(platform): voice lurker listen-only join and guards (Phase 72)
joinVoiceChannel auto-upgrades lurkers to listen-only; joinVoiceListenOnly
is explicit. Blocks unmute, soundboard, screen share, and mic capture when
listen-only. View exposes canJoinVoiceListenOnly, voiceMedia.listenOnly,
and listenOnly on voiceStatesByChannel. Audit VOICE_JOIN_LISTEN.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:10:41 -04:00
Raven ScottandCursor fd70fa4df6 feat(navigation): navigateDeepLink and formatMessageDeepLink APIs
Parse pearcord:// URLs, load guild or openGroupDM context, then
jumpToMessage for notification and share-link flows.

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:05:02 -04:00
Raven ScottandCursor 414132f717 feat(guild): enforce lurker read-only across send, react, and voice
- setMemberRole accepts lurker; _assertCanParticipate guards writes
- canPostInActiveChannel false for lurkers without custom role perms
- Blocks joinVoiceChannel, toggleReaction, and message edits for lurkers

Co-authored-by: Cursor <[email protected]>
2026-05-22 02:00:12 -04:00
Raven ScottandCursor ea21235813 feat(messages): cross-channel jump-to-reply resolution
Add resolveMessageJump and jumpToMessage so the UI can navigate to
reply parents in other text/DM channels before scrolling and highlighting.

Co-authored-by: Cursor <[email protected]>
2026-05-22 01:55:16 -04:00
Raven ScottandCursor 593cb1ec6c feat(guild): P2P guild icon upload, preview, and sync extensions
- setGuildIconImage stages on __guild-icon__ channel (256 KB image cap)
- readGuildIconPreview with attach-mesh prefetch reuse
- GUILD_UPDATE gossip enriched via enrichGuildUpdateGossip
- GUILD_SYNC bundle includes guild snapshot + icon attachment row
- ingest guild iconHash on sync; push sync when icon present

Co-authored-by: Cursor <[email protected]>
2026-05-22 01:52:42 -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 bd3548986e feat(platform): GUILD_SYNC member roster ingest and push (v0.8.30)
- _buildGuildSyncBundle includes full members[] from listMembers()
- _ingestGuildSync upserts member rows and emits member for UI refresh
- _pushGuildSyncToMesh runs when messages or members exist (not messages-only)

Late joiners and reconnecting peers receive roster + roles over live mesh.

Co-authored-by: Cursor <[email protected]>
2026-05-22 01:42:30 -04:00
Raven ScottandCursor 7a23b528db feat(emoji): setGuildEmojiAllowedRoles and usable emoji view filtering
Expose setGuildEmojiAllowedRoles for mods, _usableGuildEmojis/_usableEmojiMap
for picker rendering, and view fields usableGuildEmojis + guildEmojiRoleOptions.

emojisByPack and emojiMap respect member role restrictions. Phase 63 / v0.8.28.

Co-authored-by: Cursor <[email protected]>
2026-05-22 00:46:22 -04:00