registerTerminalActions.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import * as vscode from "vscode"
  2. import { ClineProvider } from "../core/webview/ClineProvider"
  3. import { Terminal } from "../integrations/terminal/Terminal"
  4. const TERMINAL_COMMAND_IDS = {
  5. ADD_TO_CONTEXT: "roo-cline.terminalAddToContext",
  6. FIX: "roo-cline.terminalFixCommand",
  7. FIX_IN_CURRENT_TASK: "roo-cline.terminalFixCommandInCurrentTask",
  8. EXPLAIN: "roo-cline.terminalExplainCommand",
  9. EXPLAIN_IN_CURRENT_TASK: "roo-cline.terminalExplainCommandInCurrentTask",
  10. } as const
  11. export const registerTerminalActions = (context: vscode.ExtensionContext) => {
  12. registerTerminalAction(context, TERMINAL_COMMAND_IDS.ADD_TO_CONTEXT, "TERMINAL_ADD_TO_CONTEXT")
  13. registerTerminalActionPair(context, TERMINAL_COMMAND_IDS.FIX, "TERMINAL_FIX", "What would you like Roo to fix?")
  14. registerTerminalActionPair(
  15. context,
  16. TERMINAL_COMMAND_IDS.EXPLAIN,
  17. "TERMINAL_EXPLAIN",
  18. "What would you like Roo to explain?",
  19. )
  20. }
  21. const registerTerminalAction = (
  22. context: vscode.ExtensionContext,
  23. command: string,
  24. promptType: "TERMINAL_ADD_TO_CONTEXT" | "TERMINAL_FIX" | "TERMINAL_EXPLAIN",
  25. inputPrompt?: string,
  26. ) => {
  27. context.subscriptions.push(
  28. vscode.commands.registerCommand(command, async (args: any) => {
  29. let content = args.selection
  30. if (!content || content === "") {
  31. content = await Terminal.getTerminalContents(promptType === "TERMINAL_ADD_TO_CONTEXT" ? -1 : 1)
  32. }
  33. if (!content) {
  34. vscode.window.showWarningMessage("No terminal content selected")
  35. return
  36. }
  37. const params: Record<string, any> = {
  38. terminalContent: content,
  39. }
  40. if (inputPrompt) {
  41. params.userInput =
  42. (await vscode.window.showInputBox({
  43. prompt: inputPrompt,
  44. })) ?? ""
  45. }
  46. await ClineProvider.handleTerminalAction(command, promptType, params)
  47. }),
  48. )
  49. }
  50. const registerTerminalActionPair = (
  51. context: vscode.ExtensionContext,
  52. baseCommand: string,
  53. promptType: "TERMINAL_ADD_TO_CONTEXT" | "TERMINAL_FIX" | "TERMINAL_EXPLAIN",
  54. inputPrompt?: string,
  55. ) => {
  56. // Register new task version
  57. registerTerminalAction(context, baseCommand, promptType, inputPrompt)
  58. // Register current task version
  59. registerTerminalAction(context, `${baseCommand}InCurrentTask`, promptType, inputPrompt)
  60. }