feat: harden the dashboard workflow and operational visibility#135
Merged
Conversation
…gement Introduces `ldev dashboard` — a local web UI served at http://localhost:4242 that gives a real-time operational view of all git worktrees and their Docker environments without needing to switch terminal tabs. - dashboard-data.ts: collects worktree list (git), env status (docker compose) and recent git log for each worktree in parallel - dashboard-server.ts: lightweight Node http server, no new runtime dependencies; exposes GET /api/status plus POST start/stop actions - dashboard-html.ts: single-page app embedded as a string; polls every 8 s, renders cards with service health dots, portal URL reachability indicator, start/stop buttons, and recent commits - dashboard.command.ts: registers as `ldev dashboard --port <n>`, opens browser automatically on start https://claude.ai/code/session_01BpG1d6Yjg4EW2Hqm5aUWT6
Ahead/behind (vs origin/main or nearest base): - collectAheadBehind() tries origin/main → main → origin/master → master - Shows ↑N / ↓N badges on each worktree card; skipped for main itself - "up to date" label when both counts are zero Logs modal: - GET /api/worktrees/:name/logs → docker logs --tail 200 --timestamps - Opens as a bottom-anchored panel, closes on Esc or click-outside - Timestamps stripped to a clean readable format - Refresh button to re-fetch without closing the modal https://claude.ai/code/session_01BpG1d6Yjg4EW2Hqm5aUWT6
… restore
Fix: Start action now calls runEnvStart({wait:false}) instead of bare
docker compose up -d. The previous approach skipped runWorktreeEnv(),
seedBuildDockerConfigs() and restoreBuildDeployFromCache(), which caused
modules and the theme to not be deployed when starting from the dashboard.
Copy path: each card shows the worktree path with a ⎘ copy button.
Clicking writes the path to the clipboard and shows a toast. Useful for
cd-ing to the worktree in a terminal.
Delete worktree: non-main worktrees get a 🗑 button (right-aligned in
the actions row). Clicking prompts a confirm() dialog, then calls
DELETE /api/worktrees/:name which runs runWorktreeClean({force:true}).
The card disappears on the next poll after deletion.
https://claude.ai/code/session_01BpG1d6Yjg4EW2Hqm5aUWT6
…perations feat(docs): add site building guidance for structured content and page mutations test(oauth): validate default OAuth scopes for agentic authoring and config persistence
…k and add overrides
…oject' in documentation and tests
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 hardens the new local dashboard so it is ready for final review and day-to-day use as an operational console for ldev worktrees and environments.
It adds:
Why
The dashboard was already functionally useful, but the original implementation still had a few merge blockers:
Validation
pm run verify:push
Follow-up