VSCode Extension: Dashboard & AT Firehose #
Vision #
Replace the current "Source Changes" welcome panel with a live dashboard that acts as a firehose for all Aesthetic Computer platform activity — git changes, AT Protocol events, and Tangled knot repo activity — all in one view.
Current State #
The welcome panel (extension.ts:966-1100) is a simple git status viewer:
- Runs
git status --porcelain+git rev-parse --abbrev-ref HEADfor the main repo + vault - Displays file list with status badges (M/A/D/?)
- Click-to-open files in editor
- Debounced refresh on file changes (300ms)
Known bug: git rev-parse --abbrev-ref HEAD fails on repos with no commits (e.g. freshly cloned submodules), showing a raw error in the UI instead of a graceful fallback.
Phase 1: Fix the Git Error + Improve Layout #
Goal: Make the existing git status panel work correctly and look better.
Phase 2: Dashboard Shell #
Goal: Transform the panel from a single-purpose git viewer into a multi-section dashboard.
-
- Source Changes — the existing git status (cleaned up from Phase 1)
- AT Firehose — live AT Protocol events (Phase 3)
- Tangled — knot/repo activity (Phase 4)
Phase 3: AT Protocol Firehose #
Goal: Show live AT Protocol activity happening on the Aesthetic Computer PDS.
The AC platform already has deep atproto integration:
- PDS at
at.aesthetic.computer - Lexicons:
computer.aesthetic.tape,computer.aesthetic.mood,computer.aesthetic.painting, etc. - Existing scripts in
at/scripts/atproto/ - News posted to atproto via
system/backend/news-atproto.mjs - Tapes synced to atproto via
system/backend/tape-atproto.mjs
What to show in the firehose: #
Implementation options: #
- Option A: WebSocket relay — Add a firehose WebSocket endpoint to the session server or a new lightweight service that subscribes to the PDS
com.atproto.sync.subscribeReposfirehose and relays events to the extension. - Option B: Polling — Periodically query
com.atproto.repo.listRecordsfor each collection on the PDS. Simpler but less real-time. - Option C: Direct firehose — Connect the extension directly to
wss://at.aesthetic.computer/xrpc/com.atproto.sync.subscribeReposand decode the CBOR/CAR stream in the extension itself. Most direct but complex.
Recommended: Option A (WebSocket relay) #
The extension already has a WebSocket connection to the session server (extension.ts:2132). We can add a firehose:event message type that the session server relays from the PDS subscription. This keeps the extension lightweight and reuses existing infrastructure.
Event display format: #
Each event in the feed should show:
- Timestamp
- Event type icon/badge (tape, mood, painting, news, etc.)
- Actor handle (clickable — opens their AC profile)
- Brief content preview (tape thumbnail, mood text, painting preview, etc.)
- Link to view the full content on aesthetic.computer
Phase 4: Tangled Knot Activity #
Goal: Show activity from the Tangled knot (AT Protocol-native git hosting).
The AC repo is mirrored on Tangled at tangled.org/aesthetic.computer/core. The knot server runs on the same PDS droplet (knot.aesthetic.computer).
What to show: #
Implementation: #
Phase 5: Polish & Interaction #
Architecture Notes #
Data flow #
PDS (at.aesthetic.computer)
└─ com.atproto.sync.subscribeRepos (firehose)
└─ Session Server (relay)
└─ WebSocket → VSCode Extension
└─ Dashboard Webview
Knot Server (knot.aesthetic.computer)
└─ XRPC / atproto API
└─ Session Server or direct polling
└─ WebSocket → VSCode Extension
└─ Dashboard Webview
Local Git Repos
└─ git status --porcelain (child_process)
└─ Extension host
└─ postMessage → Dashboard Webview
Key files to modify #
vscode-extension/extension.ts— welcome panel HTML + git status logicsession-server/session.mjs— add firehose relay endpointvscode-extension/embedded.js— may need message bridging updatesvscode-extension/package.json— new commands, settings
Dependencies to consider #
@atproto/api— already insystem/package.json- CBOR decoding for firehose (if doing direct connection)
- The extension currently bundles with esbuild — any new deps need to be bundleable