In this article, we review runTerminalCommand function in Codebuff codebase. We will look at:
- runTerminalCommand invoked in handleToolCall. 
- runTerminalCommand definition. 
I study patterns used in an open source project found on Github Trending. For this week, I reviewed Codebuff codebase and wrote this article.
runTerminalCommand invoked in handleToolCall.
runTerminalCommand is invoked in codebuff/sdk/src/client.ts at L32. This is called in a function named handleToolCall.
This handleToolCall is invoked as shown below in codebuff/npm-app/src/client.ts.
 // Handle backend-initiated tool call requests
    this.webSocket.subscribe('tool-call-request', async (action) => {
      const { requestId, toolName, input, userInputId } = action
      ...
      try {
        // Execute the tool call using existing tool handlers
        const toolCall = {
          toolCallId: requestId,
          toolName,
          input,
        }
        Spinner.get().stop()
        const toolResult = await handleToolCall(toolCall as any)
Shadcn CLI uses ora to show spinner but looks like Codebuff has its own spinner logic written in npm-app/src/utils/spinner.ts.
runTerminalCommand definition.
Below is the function declaration of runTermincalCommand:
/* ------------------------------------------------------------------ */
/* PUBLIC API – runTerminalCommand                                    */
/* ------------------------------------------------------------------ */
export const runTerminalCommand = async (
  toolCallId: string,
  command: string,
  mode: 'user' | 'assistant',
  processType: 'SYNC' | 'BACKGROUND',
  timeoutSeconds: number,
  cwd?: string,
  stdoutFile?: string,
  stderrFile?: string,
): Promise<CodebuffToolOutput<'run_terminal_command'>> => {
There are some variables initialized in this function’s definition and in the end, runTermincalCommand returns this:
/* sync mode --------------------------------------------------------- */
  return new Promise((resolve) =>
    runCommandChildProcess(
      persistentProcess!,
      modifiedCmd,
      mode,
      cwd!,
      maybeTimeoutSeconds,
      (v) => resolve(resolveCommand(v)),
    ),
  )
runCommandChildProcess is the core command runner defined in the same file, npm-app/src/terminal/run-command.ts.
About me:
Hey, my name is Ramu Narasinga. I study codebase architecture in large open-source projects.
Email: ramu.narasinga@gmail.com
Want to learn from open-source? Solve challenges inspired by open-source projects.
References:
- https://github.com/CodebuffAI/codebuff/blob/main/sdk/src/client.ts#L342 
- https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L366 
- https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L381 
- https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L175 
 


 
    
Top comments (0)