diff --git a/desktop/src/components/workspace/WorkspacePanel.tsx b/desktop/src/components/workspace/WorkspacePanel.tsx
index 4bf57ff0..35ca9bbc 100644
--- a/desktop/src/components/workspace/WorkspacePanel.tsx
+++ b/desktop/src/components/workspace/WorkspacePanel.tsx
@@ -31,6 +31,9 @@ import {
import { WorkspaceFileOpenWith } from './WorkspaceFileOpenWith'
import { WorkspaceEditor, saveWorkspaceBuffer } from './WorkspaceEditor'
import { UnsavedChangesModal } from './UnsavedChangesModal'
+import { LspStatusIndicator } from './LspStatusIndicator'
+import { errorCountFromDiagnostics, toLegacyLspState } from '../../lib/lspStateMap'
+import { sessionsApi } from '../../api/sessions'
type WorkspacePanelProps = {
sessionId: string
@@ -981,6 +984,7 @@ export function WorkspacePanel({ sessionId, embedded = false }: WorkspacePanelPr
const closePreviewTabs = useWorkspacePanelStore((state) => state.closePreviewTabs)
const initBuffer = useWorkspacePanelStore((state) => state.initBuffer)
const syncLsp = useWorkspacePanelStore((state) => state.syncLsp)
+ const loadLspState = useWorkspacePanelStore((state) => state.loadLspState)
const bufferStateByTabId = useWorkspacePanelStore((state) => state.bufferStateByTabId)
const closePanel = useWorkspacePanelStore((state) => state.closePanel)
const addWorkspaceReference = useWorkspaceChatContextStore((state) => state.addReference)
@@ -1354,17 +1358,26 @@ export function WorkspacePanel({ sessionId, embedded = false }: WorkspacePanelPr
))}
{activePreviewTab.kind === 'file' && (
-
- {t('workspace.lspState', { state: lspState?.state ?? 'idle' })} · {t('workspace.lspDiagnostics', { count: activeLspDiagnostics?.diagnosticsTotal ?? 0 })}
-
+ {
+ // Server-side LspManager keeps `unavailable` workspaces
+ // sticky until an explicit restart, so this round-trips
+ // through /lsp/restart and then re-reads state.
+ void sessionsApi
+ .restartWorkspaceLsp(sessionId, { path: activePreviewTab.path })
+ .catch(() => undefined)
+ .then(() => loadLspState(sessionId, activePreviewTab.path))
+ }}
+ onDiagnosticOpen={(diagnostic) => {
+ void openPreview(sessionId, diagnostic.path, 'file')
+ }}
+ />
)}