feat(extensions): progress UI + error display during install#828
feat(extensions): progress UI + error display during install#828yasinBursali wants to merge 3 commits intoLight-Heart-Labs:mainfrom
Conversation
…r stopped services User extensions now get real health checking instead of file-based status. "stopped" status (red badge) replaces the misleading "enabled" for crashed containers. Start button allows restarting stopped extensions without the disable-enable workaround. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tion Host agent writes stage-by-stage progress files during extension install (setup_hook → pulling → starting → done/error). Dashboard-API serves progress via polling endpoint and reflects install status in catalog. Replaces two-call install pattern with single 202+background-thread endpoint. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show real-time install progress in the Extensions portal — polling progress endpoint every 3s during install to display phase labels (downloading, starting). Add status badges for installing, setting_up, and error states. Fix frontend timeout from 120s to 300s to match backend. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lightheartdevs
left a comment
There was a problem hiding this comment.
Audit: REQUEST CHANGES — CI failing + depends on #827 + merge conflict
Good frontend work — progress polling every 3s, phase labels, useRef mirror to avoid stale closures, error badges with click-to-console. The UX design is well thought out.
Blockers:
-
CI failing: Same Ruff lint + api test failures as #827.
-
Depends on #827: Needs the progress endpoint to exist before this frontend can poll it.
-
Merge conflict: Same Extensions.jsx conflict as #825 and #827. All new UI elements must use theme variables (see mapping in #825 comment).
-
Check for hardcoded colors: Any new badges, spinners, or status text added in this PR should use
text-theme-accent/bg-theme-accent/20/text-theme-text-mutedinstead oftext-indigo-*/bg-zinc-*. The page was just migrated to the liquid metal design system in #829.
Merge order: #825 → #827 → #828
Once #825 is rebased and merged, the whole chain can follow. The backend design in #827 is solid — just needs CI fixes and the rebase.
What
Show real-time install progress in the Extensions portal with status badges for all lifecycle states.
Why
Users see only a spinner during extension install — no indication of what's happening. If Docker pulls a large image for 5 minutes, there's no progress feedback. If it fails, the error is generic. The frontend also times out at 2 minutes while the backend allows 5 — causing false "failed" messages on slow connections.
How
GET /api/extensions/{service_id}/progressevery 3s. Shows phase labels ("Downloading image...", "Starting container...") in the extension card.installProgressRefavoids stale closure bug — the polling interval updates both ref and state, catch block reads from ref.installing/setting_upshow blue badge with spinner.errorshows red clickable badge that opens console/log viewer.AbortSignal.timeoutchanged from 120000ms to 300000ms — matches backend_AGENT_TIMEOUT.Security
Test Coverage
No automated frontend tests (React testing not configured in project). Manual test checklist:
setting_upstatus shows blue badge with "setting up" label + spinnerThree Pillars Impact
Files Changed
extensions/services/dashboard/src/pages/Extensions.jsxPlatform Impact
Sequence
PR 3 of 3 — Extension Lifecycle States
🤖 Generated with Claude Code