improve wildcard matching for permissions

This commit is contained in:
Dax Raad
2025-07-31 20:40:05 -04:00
parent e6db1cf29d
commit 12f84f198f
2 changed files with 18 additions and 2 deletions

View File

@@ -7,7 +7,8 @@ import { Config } from "../config/config"
import { Filesystem } from "../util/filesystem"
import path from "path"
import { lazy } from "../util/lazy"
import { minimatch } from "minimatch"
import { Log } from "../util/log"
import { Wildcard } from "../util/wildcard"
const MAX_OUTPUT_LENGTH = 30000
const DEFAULT_TIMEOUT = 1 * 60 * 1000
@@ -85,7 +86,9 @@ export const BashTool = Tool.define("bash", {
if (!needsAsk && command[0] !== "cd") {
const ask = (() => {
for (const [pattern, value] of Object.entries(permissions)) {
if (minimatch(node.text, pattern)) {
const match = Wildcard.match(node.text, pattern)
Log.Default.info("checking", { text: node.text, pattern, match })
if (match) {
return value
}
}

View File

@@ -0,0 +1,13 @@
export namespace Wildcard {
export function match(str: string, pattern: string) {
const regex = new RegExp(
"^" +
pattern
.replace(/[.+^${}()|[\]\\]/g, "\\$&") // escape special regex chars
.replace(/\*/g, ".*") // * becomes .*
.replace(/\?/g, ".") + // ? becomes .
"$",
)
return regex.test(str)
}
}