Add live terminal dashboard for PDS monitoring#135
Merged
ascorbic merged 5 commits intofeat/pds-dashboardfrom Mar 15, 2026
Merged
Add live terminal dashboard for PDS monitoring#135ascorbic merged 5 commits intofeat/pds-dashboardfrom
ascorbic merged 5 commits intofeat/pds-dashboardfrom
Conversation
Adds `pds dashboard` command that shows a real-time terminal UI with: - Repository panel (collection counts) - Federation panel (relay sync status) - Firehose panel (subscribers, sequence number) - Notifications panel (likes, reposts, follows via AppView proxy) - Events panel (live firehose events via WebSocket) - Keybindings: [a] activate, [r] request crawl, [e] emit identity, [q] quit Uses ANSI escape codes + picocolors for rendering (no new dependencies). Firehose frames decoded with existing @atproto/lex-cbor decodeAll. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC
The separator line didn't account for the WebSocket status text width, causing it to overflow and merge with the status indicator. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC
…r padding - Fetch latestSeq from authenticated getFirehoseStatus endpoint as primary source, falling back to getSubscribers - Sort collections by priority (posts, likes, follows first) and filter out empty collections - Add missing collection names (chat, postgates, labeler) - Add right padding to events separator so "connected" isn't flush with edge https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC
Parse #identity frames from the firehose in addition to #commit frames. Identity events display with cyan "IDENTITY" action and the handle. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
atproto-pds | 1870165 | Mar 15 2026, 06:41 PM |
ascorbic
added a commit
that referenced
this pull request
Mar 15, 2026
* feat(pds): add live status dashboard at /status Dark-themed dashboard for conference demos. Shows server identity, repository record counts, relay federation sync status, firehose subscriber details, and a live event stream with inline CBOR decoding. - GET /status serves the dashboard HTML - GET /xrpc/gg.mk.experimental.getSubscribers exposes sanitized firehose subscriber metadata (connectedAt, cursor) - Relay sync polling (bsky.network) with animated status transitions - WebSocket firehose connection with minimal inline CBOR decoder * Add live terminal dashboard for PDS monitoring (#135) * feat(pds): add CLI dashboard command for live PDS monitoring Adds `pds dashboard` command that shows a real-time terminal UI with: - Repository panel (collection counts) - Federation panel (relay sync status) - Firehose panel (subscribers, sequence number) - Notifications panel (likes, reposts, follows via AppView proxy) - Events panel (live firehose events via WebSocket) - Keybindings: [a] activate, [r] request crawl, [e] emit identity, [q] quit Uses ANSI escape codes + picocolors for rendering (no new dependencies). Firehose frames decoded with existing @atproto/lex-cbor decodeAll. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC * style: apply prettier formatting https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC * fix(pds): fix events panel separator overflow in CLI dashboard The separator line didn't account for the WebSocket status text width, causing it to overflow and merge with the status indicator. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC * fix(pds): fix dashboard seq display, collection sorting, and separator padding - Fetch latestSeq from authenticated getFirehoseStatus endpoint as primary source, falling back to getSubscribers - Sort collections by priority (posts, likes, follows first) and filter out empty collections - Add missing collection names (chat, postgates, labeler) - Add right padding to events separator so "connected" isn't flush with edge https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC * feat(pds): show identity events in dashboard firehose log Parse #identity frames from the firehose in addition to #commit frames. Identity events display with cyan "IDENTITY" action and the handle. https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC --------- Co-authored-by: Claude <noreply@anthropic.com> * Remove firehose status from web dash * Changeset --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds a comprehensive live terminal dashboard for monitoring PDS (Personal Data Server) instances, complementing the existing web-based dashboard. The new CLI dashboard provides real-time visibility into repository state, federation sync status, firehose activity, and account notifications.
Key Changes
New CLI Dashboard Command (
packages/pds/src/cli/commands/dashboard.ts):Enhanced PDSClient (
packages/pds/src/cli/utils/pds-client.ts):getSubscribers()method to fetch firehose subscriber details and latest sequence numberlistNotifications()method to retrieve account notifications from AppViewlistRepos()method to get PDS revision informationgetFirehoseStatus()method to fetch firehose statusgetAccountStatus()method to check account activation stateWeb Dashboard Formatting (
packages/pds/src/dashboard.html):<!doctype html>CLI Integration (
packages/pds/src/cli/index.ts):dashboardcommand in CLI command registryImplementation Details
https://claude.ai/code/session_01XjTynB9skS7w4f14XUzTrC