Skip to content

Commit 99d1fab

Browse files
authored
Unify deployment tracking and support multiple deployments (#677)
This change centralizes deployment state management and enables seamless multi-deployment support. The extension now properly tracks per-deployment credentials, syncs state across VS Code windows, and handles login/logout flows in a unified way. Key changes: Architecture: - Add `DeploymentManager` to centralize deployment state (`url`, `label`, `token`, `user`) and coordinate extension client updates, auth contexts, and workspace refreshes - Add `LoginCoordinator` to handle login prompts with cross-window detection, preventing duplicate login dialogs when multiple windows need auth Storage & Auth: - `SecretsManager` now stores per-deployment credentials using label-based keys (`coder.session.<label>`) instead of flat `sessionToken` storage - Add LRU tracking for deployments with automatic cleanup of old credentials - Add migration from legacy flat storage format - Cross-window sync via `secrets.onDidChange` events - Debug command (`coder.debug.listDeployments`) for inspecting stored state Commands & Remote: - Commands now use `DeploymentManager` instead of directly manipulating client - Remote connection uses `LoginCoordinator` for auth prompts during workspace connections - `CliManager.configure()` now called on every remote connection, with secrets storage as the source of truth for credentials WebSocket improvements: - `CoderApi` now implements Disposable to clean up WebSocket connections - Add `setCredentials()` method to update host+token atomically, avoiding unnecessary reconnection cycles - Add `disconnect()` support to `ReconnectingWebSocket` for clean disconnects - Simplify WebSocket fallback logic with cleaner SSE fallback handling Tests: - Update `secretsManager` tests for new per-deployment API - Add comprehensive `reconnectingWebSocket` tests for disconnect/reconnect - Extend `coderApi` tests for credential handling
1 parent 5ef523f commit 99d1fab

30 files changed

+3191
-1046
lines changed

package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,19 @@
265265
"title": "Search",
266266
"category": "Coder",
267267
"icon": "$(search)"
268+
},
269+
{
270+
"command": "coder.debug.listDeployments",
271+
"title": "List Stored Deployments",
272+
"category": "Coder Debug"
268273
}
269274
],
270275
"menus": {
271276
"commandPalette": [
277+
{
278+
"command": "coder.debug.listDeployments",
279+
"when": "coder.devMode"
280+
},
272281
{
273282
"command": "coder.openFromSidebar",
274283
"when": "false"

0 commit comments

Comments
 (0)