Skip to content

feat(apex-lsp-extension): worker topology UI, status bar loading, and graph scope picker - W-22201120#386

Open
kylewalke wants to merge 12 commits into
mainfrom
kdev/extensionIntegration
Open

feat(apex-lsp-extension): worker topology UI, status bar loading, and graph scope picker - W-22201120#386
kylewalke wants to merge 12 commits into
mainfrom
kdev/extensionIntegration

Conversation

@kylewalke
Copy link
Copy Markdown
Contributor

@kylewalke kylewalke commented May 15, 2026

Summary

@W-22201120@

  • Status bar spinner for workspace loading: Replace the vscode.window.withProgress notification toast with a persistent status bar spinner that tracks server-side ingestion, cleared only when the server sends apex/workspaceIngestionComplete. Includes a 5-minute safety timeout.
  • Worker topology monitoring UI: Add live worker role cards to the queue state dashboard showing data owner, compilation, enrichment pool, and resource loader status. Request types display coord/worker dispatch indicators.
  • Performance settings for experimental workers: New section in the performance settings webview with enable toggle, pool size slider, and dedicated resource loader checkbox.
  • Graph scope picker: QuickPick prompt when viewing an Apex file to choose between "Current File" and "All Types" scope for the symbol graph.
  • Server-side topology enrichment: Inject workerTopology from the WorkerCoordinator dispatcher into both apex/queueState responses and periodic apex/queueStateChanged notifications.

Changes

Package Files What
apex-lsp-vscode-extension workspace-loader.ts Flatten async flow, remove cancellation token, use status bar spinner, add .sf exclude
apex-lsp-vscode-extension language-server.ts Register apex/workspaceIngestionComplete handler, pass workerPlatformWebUrl
apex-lsp-vscode-extension status-bar.ts Add updateApexServerStatusLoading, ingestion timeout
apex-lsp-vscode-extension workspace-find-files.ts Default maxResults to Infinity, remove implicit 1000 cap
apex-lsp-vscode-extension queueStateScript.ts Render worker topology cards and dispatch indicators
apex-lsp-vscode-extension performanceSettingsScript.ts Experimental Workers settings section
apex-lsp-vscode-extension showPerformanceSettings.ts Persist experimental.workers settings
apex-lsp-vscode-extension showGraph.ts QuickPick scope chooser
apex-lsp-vscode-extension server-config.ts Pre-create per-role profiling subdirectories
apex-ls LCSAdapter.ts Enrich queueState with workerTopology from dispatcher

Test plan

  • Open a workspace with Apex files — verify status bar shows loading spinner, transitions to "Ingesting N files on server...", and clears to ready once server finishes
  • Kill the language server while loading — verify spinner clears after 5 minutes (or restart)
  • Open Queue State dashboard in development mode — verify worker topology cards render with active/inactive indicators
  • Toggle apex.experimental.workers.enabled in performance settings — verify it persists and UI reflects the change
  • Run "Show Symbol Graph" on an Apex file — verify QuickPick offers "Current File" vs "All Types"
  • Run "Show Symbol Graph" on a non-Apex file — verify it skips QuickPick and shows all types directly

kylewalke added 10 commits May 14, 2026 14:17
…r spinner - W-22201120

Replace vscode.window.withProgress notification with status bar updates
during workspace loading. The spinner persists until the server sends
apex/workspaceIngestionComplete, giving accurate feedback on server-side
processing time.

- Add updateApexServerStatusLoading() to status-bar.ts
- Register apex/workspaceIngestionComplete handler on web + desktop clients
- Pass workerPlatformWebUrl in initialization options for web workers
- Flatten workspace-loader async flow, remove cancellation token handling
- Add .sf/** to exclude glob, support maxFileCount in development mode
- Default findFilesAcrossWorkspaceFolders maxResults to Infinity
…er - W-22201120

Add extension-side UI for monitoring and configuring the worker topology:

- performanceSettingsScript: add Experimental Workers section with enable
  toggle, pool size, and resource loader controls
- queueStateScript: render worker topology cards with role status indicators
  and coordinator/worker dispatch tags on request types
- showGraph: add QuickPick scope chooser (Current File vs All Types)
- showPerformanceSettings: persist experimental.workers settings
- server-config: pre-create per-role profiling subdirectories for workers
…ics - W-22201120

Inject workerTopology from the WorkerCoordinator dispatcher into both the
apex/queueState request response and the periodic apex/queueStateChanged
notification. This enables the queue state dashboard to render live worker
role cards and dispatch indicators.
De-duplicate the apex/workspaceIngestionComplete notification handler
that was registered identically in both createWebLanguageClient and
createDesktopLanguageClient into a single registerIngestionCompleteHandler
helper.
The exclude glob template already wraps entries with **/{...}/**,
so the entry should be just '.sf' (not '.sf/**') to produce the
correct pattern **/.sf/** matching .sf directories at any level.
…notification

If the server crashes or fails to send apex/workspaceIngestionComplete,
the status bar spinner would spin indefinitely. Add a 5-minute timeout
that falls back to ready state and logs a warning.
Replace 'any' with ExperimentalSettings interface for the
renderExperimentalWorkers method parameter. Add ExperimentalSettings
and ExperimentalWorkersSettings interfaces to the webview script.
The fallback when no setting exists is enabled: true, so the help text
should say "(default: on)" not "(default: off)".
- Narrow the 'as any' cast in queueState handler to a proper type
  assertion (Record<string, unknown>) after the 'metrics' in-check
- Align coordinatorOnlyTypes to 'readonly string[]' on both server
  and client interfaces
- Move enrichedMetrics computation after the log statement that
  references the original metrics to reduce confusion
@kylewalke kylewalke requested a review from a team as a code owner May 15, 2026 00:06
@kylewalke kylewalke requested a review from peternhale May 15, 2026 00:06
@forcedotcom forcedotcom deleted a comment from github-actions Bot May 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant