mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-22 18:24:21 +01:00
improve wildcard matching for permissions
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
13
packages/opencode/src/util/wildcard.ts
Normal file
13
packages/opencode/src/util/wildcard.ts
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user