Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

- Update `/openDevContainer` to support all dev container features when hostPath
and configFile are provided.
- Fix opening a workspace restores the VS Code session (files, tabs, context)
of the selected agent.

## [v1.9.2](https://github.com/coder/vscode-coder/releases/tag/v1.9.2) 2025-06-25

Expand Down
38 changes: 27 additions & 11 deletions src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -436,12 +436,15 @@ export class Commands {
if (!baseUrl) {
throw new Error("You are not logged in");
}
if (treeItem.primaryAgentName === undefined) {
return;
}
await openWorkspace(
baseUrl,
treeItem.workspaceOwner,
treeItem.workspaceName,
treeItem.workspaceAgent,
treeItem.workspaceFolderPath,
treeItem.primaryAgentName,
treeItem.primaryAgentFolderPath,
true,
);
} else {
Expand Down Expand Up @@ -524,6 +527,8 @@ export class Commands {
let folderPath: string | undefined;
let openRecent: boolean | undefined;

let workspace: Workspace | undefined;

const baseUrl = this.restClient.getAxiosInstance().defaults.baseURL;
if (!baseUrl) {
throw new Error("You are not logged in");
Expand Down Expand Up @@ -570,7 +575,7 @@ export class Commands {
});
});
quickPick.show();
const workspace = await new Promise<Workspace | undefined>((resolve) => {
workspace = await new Promise<Workspace | undefined>((resolve) => {
quickPick.onDidHide(() => {
resolve(undefined);
});
Expand All @@ -589,20 +594,31 @@ export class Commands {
}
workspaceOwner = workspace.owner_name;
workspaceName = workspace.name;
} else {
workspaceOwner = args[0] as string;
workspaceName = args[1] as string;
workspaceAgent = args[2] as string | undefined;
folderPath = args[3] as string | undefined;
openRecent = args[4] as boolean | undefined;
}

if (!workspaceAgent) {
if (workspace === undefined) {
workspace = await this.restClient.getWorkspaceByOwnerAndName(
workspaceOwner,
workspaceName,
);
}

const agent = await this.maybeAskAgent(workspace);
if (!agent) {
// User declined to pick an agent.
return;
}
folderPath = agent.expanded_directory;
if (!folderPath) {
folderPath = agent.expanded_directory;
}
workspaceAgent = agent.name;
} else {
workspaceOwner = args[0] as string;
workspaceName = args[1] as string;
workspaceAgent = args[2] as string | undefined;
folderPath = args[3] as string | undefined;
openRecent = args[4] as boolean | undefined;
}

await openWorkspace(
Expand Down Expand Up @@ -677,7 +693,7 @@ async function openWorkspace(
baseUrl: string,
workspaceOwner: string,
workspaceName: string,
workspaceAgent: string | undefined,
workspaceAgent: string,
folderPath: string | undefined,
openRecent: boolean | undefined,
) {
Expand Down
8 changes: 4 additions & 4 deletions src/workspacesProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -436,8 +436,8 @@ export class OpenableTreeItem extends vscode.TreeItem {

public readonly workspaceOwner: string,
public readonly workspaceName: string,
public readonly workspaceAgent: string | undefined,
public readonly workspaceFolderPath: string | undefined,
public readonly primaryAgentName: string | undefined,
public readonly primaryAgentFolderPath: string | undefined,

contextValue: CoderOpenableTreeItemType,
) {
Expand Down Expand Up @@ -476,7 +476,7 @@ class AgentTreeItem extends OpenableTreeItem {
}
}

export class WorkspaceTreeItem extends OpenableTreeItem {
class WorkspaceTreeItem extends OpenableTreeItem {
public appStatus: {
name: string;
url?: string;
Expand Down Expand Up @@ -509,7 +509,7 @@ export class WorkspaceTreeItem extends OpenableTreeItem {
: vscode.TreeItemCollapsibleState.Expanded,
workspace.owner_name,
workspace.name,
undefined,
agents[0]?.name,
agents[0]?.expanded_directory,
agents.length > 1
? "coderWorkspaceMultipleAgents"
Expand Down