refactor(core): move path resolve into fs service (#35201)

This commit is contained in:
James Long 2026-07-03 13:25:38 -04:00 committed by GitHub
commit aad8d90dd1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 37 additions and 21 deletions

View file

@ -80,17 +80,21 @@ const modelOutput = (output: Output): string | undefined => {
const shellTokens = (command: string) => command.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) ?? []
const unquote = (value: string) => value.replace(/^(['"])(.*)\1$/, "$2")
const externalCommandDirectories = (command: string, cwd: string) => {
const externalCommandDirectories = Effect.fn("ShellTool.externalCommandDirectories")(function* (
fs: FSUtil.Interface,
command: string,
cwd: string,
) {
const directories = new Set<string>()
for (const token of shellTokens(command)) {
const value = unquote(token).replace(/[;,|&]+$/, "")
if (!path.isAbsolute(value)) continue
const resolved = FSUtil.resolve(value)
const resolved = yield* fs.resolve(value)
if (FSUtil.contains(cwd, resolved)) continue
directories.add(FSUtil.resolve(path.dirname(resolved)))
directories.add(yield* fs.resolve(path.dirname(resolved)))
}
return [...directories]
}
})
export const Plugin = {
id: "core-shell-tool",
@ -168,7 +172,7 @@ export const Plugin = {
agent: context.agent,
source,
})
const warnings = externalCommandDirectories(input.command, target.canonical).map(
const warnings = (yield* externalCommandDirectories(fsUtil, input.command, target.canonical)).map(
(directory) =>
`Command argument references external directory ${path.join(directory, "*").replaceAll("\\", "/")}. Shell runs with host-user filesystem, process, and network authority; this scan is advisory only.`,
)