pi-guardrails: v0.17.0
Minor Changes
-
ffc7ca7: path-access: filter non-path bash arguments by shape and filesystem plausibility instead of per-command allow-lists.
Arguments that look like paths but are not (Context7 library IDs such as
/websites/apisix, Go package patterns like./..., URLs,user@host:remote targets,docker -v /src:/dstvolume specs) no longer trigger outside-workspace prompts, for every CLI rather than an enumerated list.Filtering never applies to redirect targets, interpreter programs, commands that create missing parent directories, or tokens holding an unexpanded shell reference, so real outside-workspace access is still surfaced.
The
awk,sed,grep,jq, andgoclassifiers are removed as redundant. Interpreter,find, and delimiter (cut/sort/tr) handling is unchanged.
Patch Changes
-
dcd815b: Make Pi documentation path grants optional so the extension loads in Oh My Pi.
extensions/path-access/dynamic-resources.tsno longer statically imports namedgetReadmePath,getDocsPath, andgetExamplesPathhelpers from@earendil-works/pi-coding-agent. When those helpers are unavailable (e.g. under Oh My Pi), documentation grants are skipped instead of failing extension validation. -
ad2c8d7: Adopt @aliou/pi-utils-settings 0.19.1 and switch migrations to package semver versions.
-
0a15f3f: Fix secret-files (and other
onlyIfExists) policies being bypassed when a bash target path contains an unexpanded shell expansion such as$VAR,${VAR},$(...),$((...)), or process substitution.Previously, a command like
head "$SC/.env"extracted the literal target$SC/.env. The.envbasename matched the policy, but the policy’sonlyIfExistscheck thenstat()’d<cwd>/$SC/.env— a path that never exists — and let the read through.Target extraction now marks such paths as unresolved, and the policy check no longer applies
onlyIfExiststo them: a path we can’t resolve can’t be used to prove a file doesn’t exist. This follows ShellCheck’s stance that shell indirection is “known to be unsolvable in the most general case” — unresolved references are treated conservatively rather than optimistically.