Skip to content

Commit 69dd965

Browse files
committed
check for virtual workspaces
1 parent c86e1bd commit 69dd965

5 files changed

Lines changed: 19 additions & 9 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@
605605
"capabilities": {
606606
"virtualWorkspaces": {
607607
"supported": "limited",
608-
"description": "In certain virtual workspace scenarios (namely Web), Terminal, Tasks, Git support and Copilot Chat mode is not available."
608+
"description": "In virtual workspaces, Terminal, Tasks, Git support (restricted on web) and Copilot Chat mode (restricted on web) is not available."
609609
},
610610
"untrustedWorkspaces": {
611611
"supported": "limited",

src/pseudoterminal.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import * as vscode from 'vscode';
88
import { spawn, ChildProcessWithoutNullStreams } from 'node:child_process';
99
import { NEURO } from '~/constants';
10-
import { checkWorkspaceTrust } from '~/utils';
10+
import { checkWorkspaceTrust, checkVirtualWorkspace } from '~/utils';
1111
import { logOutput, delayAsync, getFence } from '~/utils';
1212
import { ActionData, actionValidationAccept, actionValidationFailure, ActionValidationResult, RCEAction, contextFailure, stripToActions } from '~/neuro_client_helper';
1313
import { CONFIG, PERMISSIONS, getPermissionLevel } from '~/config';
@@ -49,7 +49,7 @@ export const terminalAccessHandlers = {
4949
},
5050
permissions: [PERMISSIONS.terminalAccess],
5151
handler: handleRunCommand,
52-
validator: [checkWorkspaceTrust],
52+
validator: [checkVirtualWorkspace, checkWorkspaceTrust],
5353
promptGenerator: (actionData: ActionData) => `run "${actionData.params?.command}" in the "${actionData.params?.shell}" shell.`,
5454
},
5555
'kill_terminal_process': {
@@ -64,15 +64,15 @@ export const terminalAccessHandlers = {
6464
},
6565
permissions: [PERMISSIONS.terminalAccess],
6666
handler: handleKillTerminal,
67-
validator: [checkLiveTerminals, checkWorkspaceTrust],
67+
validator: [checkLiveTerminals, checkVirtualWorkspace, checkWorkspaceTrust],
6868
promptGenerator: (actionData: ActionData) => `kill the "${actionData.params?.shell}" shell.`,
6969
},
7070
'get_currently_running_shells': {
7171
name: 'get_currently_running_shells',
7272
description: 'Get the list of terminal processes that are spawned.',
7373
permissions: [PERMISSIONS.terminalAccess],
7474
handler: handleGetCurrentlyRunningShells,
75-
validator: [checkWorkspaceTrust],
75+
validator: [checkVirtualWorkspace, checkWorkspaceTrust],
7676
promptGenerator: 'get the list of currently running shells.',
7777
},
7878
} satisfies Record<string, RCEAction>;

src/rce.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as vscode from 'vscode';
77
import { ActionData, RCEAction } from '~/neuro_client_helper';
88
import { NEURO } from '~/constants';
9-
import { checkWorkspaceTrust, logOutput } from '~/utils';
9+
import { checkVirtualWorkspace, checkWorkspaceTrust, logOutput } from '~/utils';
1010
import { CONFIG, getPermissionLevel, PermissionLevel, PERMISSIONS } from '~/config';
1111
import { handleRunTask } from '~/tasks';
1212
import { validate } from 'jsonschema';
@@ -252,7 +252,7 @@ export async function RCEActionHandler(actionData: ActionData, actionList: Recor
252252
description: task.description,
253253
permissions: [PERMISSIONS.runTasks],
254254
handler: handleRunTask,
255-
validator: [checkWorkspaceTrust],
255+
validator: [checkVirtualWorkspace, checkWorkspaceTrust],
256256
promptGenerator: () => `run the task "${task.id}".`,
257257
};
258258
}

src/tasks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import * as vscode from 'vscode';
88

99
import { NEURO } from '~/constants';
10-
import { logOutput, formatActionID, getFence, checkWorkspaceTrust } from '~/utils';
10+
import { logOutput, formatActionID, getFence, checkWorkspaceTrust, checkVirtualWorkspace } from '~/utils';
1111
import { ActionData, RCEAction, actionValidationAccept, actionValidationFailure, stripToActions } from '~/neuro_client_helper';
1212
import { CONFIG, PERMISSIONS, getPermissionLevel } from '~/config';
1313

@@ -19,7 +19,7 @@ export const taskHandlers = {
1919
permissions: [PERMISSIONS.runTasks],
2020
handler: handleTerminateTask,
2121
promptGenerator: 'terminate the currently running task.',
22-
validator: [checkWorkspaceTrust, () => NEURO.currentTaskExecution !== null
22+
validator: [checkVirtualWorkspace, checkWorkspaceTrust, () => NEURO.currentTaskExecution !== null
2323
? actionValidationAccept()
2424
: actionValidationFailure('No task to terminate.')],
2525
},

src/utils.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,13 @@ export function checkWorkspaceTrust(_actionData: ActionData): ActionValidationRe
390390
}
391391
return actionValidationFailure('You are in an untrusted workspace.');
392392
}
393+
394+
/**
395+
* Checks if the extension is currently on a virtual file system.
396+
*/
397+
export function checkVirtualWorkspace(_actionData: ActionData): ActionValidationResult {
398+
if (vscode.workspace.workspaceFolders?.every(f => f.uri.scheme !== 'file')) {
399+
return actionValidationFailure('You are currently in a virtual workspace.');
400+
}
401+
return actionValidationAccept();
402+
}

0 commit comments

Comments
 (0)