mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-11 02:33:10 +08:00
Two false-negatives surfaced in PR #1889 review: 1. Brace-group bypass (Greptile). `{ npm run dev; }` evaluates the dev command in the *current* shell — semantically distinct from `( ... )` but with the same effect for this hook. `splitShellSegments` correctly cleaves the group at `;` into `["{ npm run dev", "}"]`, but the first segment's leading token under `readToken` is the bare `{`, which was not in `DEV_COMMAND_WORDS`, so the dev-pattern check was skipped. Fix: treat `{` and `}` as no-op tokens in `getLeadingCommandWord` so we keep walking to the real command word. Matches how shell itself parses brace groups (the braces are reserved words, not commands). Bash requires a space after `{` and a terminator before `}` for an actual group, so `{npm run dev}` correctly remains allowed (single token `{npm`, not in `DEV_COMMAND_WORDS`). 2. Missing yarn-run / bun-bare variants (CodeRabbit). Both `yarn dev` *and* `yarn run dev` are valid (the latter is what `package.json` actually wires `dev` to under yarn 1.x). The same `(run )?` symmetry applies to bun. The previous `DEV_PATTERN` only matched `yarn\s+dev` and `bun\s+run\s+dev`, allowing the cross forms to pass through silently. Fix: `yarn(?:\s+run)?\s+dev` and `bun(?:\s+run)?\s+dev` — same shape `pnpm(?:\s+run)?\s+dev` was already using. Verified after this commit (every form now exits 2): { npm run dev; } { npm run dev ; } echo hi && { npm run dev; } ({ npm run dev; }) $( { npm run dev; } ) yarn run dev bun dev Verified still allowed (no regression): echo "{ npm run dev; }" # literal inside double quotes {npm run dev} # not a brace group per bash syntax
5.4 KiB
Executable File
5.4 KiB
Executable File