Monorepo for Aesthetic.Computer aesthetic.computer
6.7 kB

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 HEAD for 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.

    1. Source Changes — the existing git status (cleaned up from Phase 1)
    2. AT Firehose — live AT Protocol events (Phase 3)
    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.subscribeRepos firehose and relays events to the extension.
  • Option B: Polling — Periodically query com.atproto.repo.listRecords for 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.subscribeRepos and decode the CBOR/CAR stream in the extension itself. Most direct but complex.

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 logic
  • session-server/session.mjs — add firehose relay endpoint
  • vscode-extension/embedded.js — may need message bridging updates
  • vscode-extension/package.json — new commands, settings

Dependencies to consider #

  • @atproto/api — already in system/package.json
  • CBOR decoding for firehose (if doing direct connection)
  • The extension currently bundles with esbuild — any new deps need to be bundleable