Blog
`runTerminalCommand` function in Codebuff codebase.

`runTerminalCommand` function in Codebuff codebase.

In this article, we review runTerminalCommand function in Codebuff codebase. We will look at:

  1. runTerminalCommand invoked in handleToolCall.

  2. 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:

  1. https://github.com/CodebuffAI/codebuff/blob/main/sdk/src/client.ts#L342

  2. https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L366

  3. https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L381

  4. https://github.com/CodebuffAI/codebuff/blob/main/npm-app/src/terminal/run-command.ts#L175

  5. https://www.npmjs.com/package/ora