From 75de043ded9fca8f6281524db1190c961aee2594 Mon Sep 17 00:00:00 2001 From: Eric Wheeler Date: Fri, 7 Mar 2025 19:09:51 -0800 Subject: [PATCH] Revert "Remove terminal actions" This reverts commit 75dcc2ffcf775f33ca7bb87b46f5397c8357acfc which has been fixed by PR #1365. Fixes: #1380 --- package.json | 47 ++++++++++++++ src/activate/index.ts | 1 + src/activate/registerTerminalActions.ts | 81 +++++++++++++++++++++++++ src/extension.ts | 10 ++- 4 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 src/activate/registerTerminalActions.ts diff --git a/package.json b/package.json index d6ccae86ed..4a3e795fdb 100644 --- a/package.json +++ b/package.json @@ -128,6 +128,31 @@ "command": "roo-cline.addToContext", "title": "Roo Code: Add To Context", "category": "Roo Code" + }, + { + "command": "roo-cline.terminalAddToContext", + "title": "Roo Code: Add Terminal Content to Context", + "category": "Terminal" + }, + { + "command": "roo-cline.terminalFixCommand", + "title": "Roo Code: Fix This Command", + "category": "Terminal" + }, + { + "command": "roo-cline.terminalExplainCommand", + "title": "Roo Code: Explain This Command", + "category": "Terminal" + }, + { + "command": "roo-cline.terminalFixCommandInCurrentTask", + "title": "Roo Code: Fix This Command (Current Task)", + "category": "Terminal" + }, + { + "command": "roo-cline.terminalExplainCommandInCurrentTask", + "title": "Roo Code: Explain This Command (Current Task)", + "category": "Terminal" } ], "menus": { @@ -153,6 +178,28 @@ "group": "Roo Code@4" } ], + "terminal/context": [ + { + "command": "roo-cline.terminalAddToContext", + "group": "Roo Code@1" + }, + { + "command": "roo-cline.terminalFixCommand", + "group": "Roo Code@2" + }, + { + "command": "roo-cline.terminalExplainCommand", + "group": "Roo Code@3" + }, + { + "command": "roo-cline.terminalFixCommandInCurrentTask", + "group": "Roo Code@5" + }, + { + "command": "roo-cline.terminalExplainCommandInCurrentTask", + "group": "Roo Code@6" + } + ], "view/title": [ { "command": "roo-cline.plusButtonClicked", diff --git a/src/activate/index.ts b/src/activate/index.ts index 8b3d91cdcb..7cc36a0b8a 100644 --- a/src/activate/index.ts +++ b/src/activate/index.ts @@ -2,3 +2,4 @@ export { handleUri } from "./handleUri" export { registerCommands } from "./registerCommands" export { registerCodeActions } from "./registerCodeActions" export { createRooCodeAPI } from "./createRooCodeAPI" +export { registerTerminalActions } from "./registerTerminalActions" diff --git a/src/activate/registerTerminalActions.ts b/src/activate/registerTerminalActions.ts new file mode 100644 index 0000000000..fbf2a0510c --- /dev/null +++ b/src/activate/registerTerminalActions.ts @@ -0,0 +1,81 @@ +import * as vscode from "vscode" +import { ClineProvider } from "../core/webview/ClineProvider" +import { TerminalManager } from "../integrations/terminal/TerminalManager" + +const TERMINAL_COMMAND_IDS = { + ADD_TO_CONTEXT: "roo-cline.terminalAddToContext", + FIX: "roo-cline.terminalFixCommand", + FIX_IN_CURRENT_TASK: "roo-cline.terminalFixCommandInCurrentTask", + EXPLAIN: "roo-cline.terminalExplainCommand", + EXPLAIN_IN_CURRENT_TASK: "roo-cline.terminalExplainCommandInCurrentTask", +} as const + +export const registerTerminalActions = (context: vscode.ExtensionContext) => { + const terminalManager = new TerminalManager() + + registerTerminalAction(context, terminalManager, TERMINAL_COMMAND_IDS.ADD_TO_CONTEXT, "TERMINAL_ADD_TO_CONTEXT") + + registerTerminalActionPair( + context, + terminalManager, + TERMINAL_COMMAND_IDS.FIX, + "TERMINAL_FIX", + "What would you like Roo to fix?", + ) + + registerTerminalActionPair( + context, + terminalManager, + TERMINAL_COMMAND_IDS.EXPLAIN, + "TERMINAL_EXPLAIN", + "What would you like Roo to explain?", + ) +} + +const registerTerminalAction = ( + context: vscode.ExtensionContext, + terminalManager: TerminalManager, + command: string, + promptType: "TERMINAL_ADD_TO_CONTEXT" | "TERMINAL_FIX" | "TERMINAL_EXPLAIN", + inputPrompt?: string, +) => { + context.subscriptions.push( + vscode.commands.registerCommand(command, async (args: any) => { + let content = args.selection + if (!content || content === "") { + content = await terminalManager.getTerminalContents(promptType === "TERMINAL_ADD_TO_CONTEXT" ? -1 : 1) + } + + if (!content) { + vscode.window.showWarningMessage("No terminal content selected") + return + } + + const params: Record = { + terminalContent: content, + } + + if (inputPrompt) { + params.userInput = + (await vscode.window.showInputBox({ + prompt: inputPrompt, + })) ?? "" + } + + await ClineProvider.handleTerminalAction(command, promptType, params) + }), + ) +} + +const registerTerminalActionPair = ( + context: vscode.ExtensionContext, + terminalManager: TerminalManager, + baseCommand: string, + promptType: "TERMINAL_ADD_TO_CONTEXT" | "TERMINAL_FIX" | "TERMINAL_EXPLAIN", + inputPrompt?: string, +) => { + // Register new task version + registerTerminalAction(context, terminalManager, baseCommand, promptType, inputPrompt) + // Register current task version + registerTerminalAction(context, terminalManager, `${baseCommand}InCurrentTask`, promptType, inputPrompt) +} diff --git a/src/extension.ts b/src/extension.ts index e3f9977999..5793db71c0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -19,7 +19,7 @@ import { DIFF_VIEW_URI_SCHEME } from "./integrations/editor/DiffViewProvider" import { McpServerManager } from "./services/mcp/McpServerManager" import { telemetryService } from "./services/telemetry/TelemetryService" -import { handleUri, registerCommands, registerCodeActions, createRooCodeAPI } from "./activate" +import { handleUri, registerCommands, registerCodeActions, createRooCodeAPI, registerTerminalActions } from "./activate" /** * Built using https://github.com/microsoft/vscode-webview-ui-toolkit @@ -98,10 +98,16 @@ export function activate(context: vscode.ExtensionContext) { registerCodeActions(context) + /** + * Temporary disabled until we have a better way to share the terminal + * manager. + */ + // registerTerminalActions(context) + return createRooCodeAPI(outputChannel, sidebarProvider) } -// This method is called when your extension is deactivated. +// This method is called when your extension is deactivated export async function deactivate() { outputChannel.appendLine("Roo-Code extension deactivated") // Clean up MCP server manager