Browse Source

fix: ensure timeout param passed to bash tool is positive

Aiden Cline 5 months ago
parent
commit
fc8db6cdf9
1 changed files with 12 additions and 2 deletions
  1. 12 2
      packages/opencode/src/tool/bash.ts

+ 12 - 2
packages/opencode/src/tool/bash.ts

@@ -27,7 +27,9 @@ const parser = lazy(async () => {
     return p
   } catch (e) {
     const { default: Parser } = await import("web-tree-sitter")
-    const { default: treeWasm } = await import("web-tree-sitter/tree-sitter.wasm" as string, { with: { type: "wasm" } })
+    const { default: treeWasm } = await import("web-tree-sitter/tree-sitter.wasm" as string, {
+      with: { type: "wasm" },
+    })
     await Parser.init({
       locateFile() {
         return treeWasm
@@ -55,6 +57,11 @@ export const BashTool = Tool.define("bash", {
       ),
   }),
   async execute(params, ctx) {
+    if (params.timeout !== undefined && params.timeout < 0) {
+      throw new Error(
+        `Invalid timeout value: ${params.timeout}. Timeout must be a positive number.`,
+      )
+    }
     const timeout = Math.min(params.timeout ?? DEFAULT_TIMEOUT, MAX_TIMEOUT)
     const tree = await parser().then((p) => p.parse(params.command))
     const permissions = await Agent.get(ctx.agent).then((x) => x.permission.bash)
@@ -97,7 +104,10 @@ export const BashTool = Tool.define("bash", {
 
       // always allow cd if it passes above check
       if (command[0] !== "cd") {
-        const action = Wildcard.allStructured({ head: command[0], tail: command.slice(1) }, permissions)
+        const action = Wildcard.allStructured(
+          { head: command[0], tail: command.slice(1) },
+          permissions,
+        )
         if (action === "deny") {
           throw new Error(
             `The user has specifically restricted access to this command, you are not allowed to execute it. Here is the configuration: ${JSON.stringify(permissions)}`,