diff --git a/extensions/vscode/src/extension.ts b/extensions/vscode/src/extension.ts index 4712ebc4226..f3da5121d9a 100644 --- a/extensions/vscode/src/extension.ts +++ b/extensions/vscode/src/extension.ts @@ -14,6 +14,14 @@ async function dynamicImportAndActivate(context: vscode.ExtensionContext) { } export function activate(context: vscode.ExtensionContext) { + // Register viewLogs command early so it's available even if + // the dynamic import/activation fails. + context.subscriptions.push( + vscode.commands.registerCommand("continue.viewLogs", () => { + vscode.commands.executeCommand("workbench.action.toggleDevTools"); + }), + ); + return dynamicImportAndActivate(context).catch((e) => { console.log("Error activating extension: ", e); vscode.window diff --git a/packages/terminal-security/src/evaluateTerminalCommandSecurity.ts b/packages/terminal-security/src/evaluateTerminalCommandSecurity.ts index 693eef25f9c..d763f8e3b22 100644 --- a/packages/terminal-security/src/evaluateTerminalCommandSecurity.ts +++ b/packages/terminal-security/src/evaluateTerminalCommandSecurity.ts @@ -428,10 +428,17 @@ function isCriticalCommand(baseCommand: string, args: string[]): boolean { arg === "/etc" || arg === "/bin" || arg === "/sbin" || + arg === "/home" || + arg === "/root" || + arg === "$HOME" || arg.startsWith("/usr/") || arg.startsWith("/etc/") || arg.startsWith("/bin/") || - arg.startsWith("/sbin/"), + arg.startsWith("/sbin/") || + arg.startsWith("/home/") || + arg.startsWith("/root/") || + arg.startsWith("$HOME") || + arg.startsWith("${HOME}"), ); // If we have rm flags with dangerous paths, it's critical regardless of command @@ -457,6 +464,10 @@ function isCriticalCommand(baseCommand: string, args: string[]): boolean { "/usr/sbin/", "/lib/", "/lib64/", + "/home/", + "/root/", + "$HOME", + "${HOME}", ]; if (args.some((arg) => criticalPaths.some((path) => arg.includes(path)))) { return true; @@ -492,6 +503,24 @@ function isCriticalCommand(baseCommand: string, args: string[]): boolean { } } + // Find -delete (destructive file deletion via find) + if (baseCommand === "find" && args.some((arg) => arg === "-delete")) { + return true; + } + + // Destructive disk/file commands + if ( + baseCommand === "shred" || + baseCommand === "wipefs" + ) { + return true; + } + + // pkexec privilege escalation + if (baseCommand === "pkexec") { + return true; + } + // Privilege escalation const privEscCommands = ["sudo", "su", "doas", "runas", "gsudo", "psexec"]; if (privEscCommands.includes(baseCommand)) {