@mnemonik/claude-code-hooks 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,12 +26,22 @@ export declare function tokenize(input: string): TokenizeResult;
26
26
  /**
27
27
  * Match a token sequence against a project policy pattern.
28
28
  *
29
- * Patterns can be:
30
- * - Plain phrases like "git push origin main" — substring-matched against
31
- * the joined command after tokenisation. Whitespace-normalised both sides.
32
- * - Glob-ish wildcards like "git push *" "*" matches any single token.
33
- * - Regex: when the pattern starts with "/" and ends with "/" or "/i",
34
- * the inner expression is compiled and run against the joined command.
29
+ * Pattern kinds (auto-detected — authors don't have to wrap in /…/):
30
+ * - Plain phrase like "git push origin main" — split into pattern tokens by
31
+ * whitespace; matches when a contiguous sub-sequence of `commandTokens`
32
+ * equals the pattern tokens. Critically, this does NOT substring-match
33
+ * against `tokens.join(' ')` that would defeat the tokenizer (e.g.
34
+ * `echo '{"x":"git push origin main"}'` would falsely match because the
35
+ * literal phrase appears inside a single-quoted JSON token).
36
+ * - Glob like "git push *" or "delete-*" — pattern tokens with "*" matching
37
+ * any single command token (one-for-one). "*" within a token (e.g.
38
+ * "delete-*") is anchored to one whole command token.
39
+ * - Regex — anything that looks like a regex (contains "|", "\\", "^", "$",
40
+ * "(", ")", ".", "+", "?", "{", "}", "[", "]") OR is wrapped in /…/ or
41
+ * /…/i. Compiled and tested against `tokens.join(' ')`. The auto-detect
42
+ * covers the realistic case where a project's mustConfirm pattern is
43
+ * pipe-alternation (e.g. "make staging|make prod|git push|git commit")
44
+ * without explicit /…/ wrapping.
35
45
  *
36
46
  * Returning the matched pattern (verbatim) lets the dispatcher key bypass
37
47
  * telemetry / dedup against `recentPolicyChecks` exactly.
@@ -102,12 +102,22 @@ export function tokenize(input) {
102
102
  /**
103
103
  * Match a token sequence against a project policy pattern.
104
104
  *
105
- * Patterns can be:
106
- * - Plain phrases like "git push origin main" — substring-matched against
107
- * the joined command after tokenisation. Whitespace-normalised both sides.
108
- * - Glob-ish wildcards like "git push *" "*" matches any single token.
109
- * - Regex: when the pattern starts with "/" and ends with "/" or "/i",
110
- * the inner expression is compiled and run against the joined command.
105
+ * Pattern kinds (auto-detected — authors don't have to wrap in /…/):
106
+ * - Plain phrase like "git push origin main" — split into pattern tokens by
107
+ * whitespace; matches when a contiguous sub-sequence of `commandTokens`
108
+ * equals the pattern tokens. Critically, this does NOT substring-match
109
+ * against `tokens.join(' ')` that would defeat the tokenizer (e.g.
110
+ * `echo '{"x":"git push origin main"}'` would falsely match because the
111
+ * literal phrase appears inside a single-quoted JSON token).
112
+ * - Glob like "git push *" or "delete-*" — pattern tokens with "*" matching
113
+ * any single command token (one-for-one). "*" within a token (e.g.
114
+ * "delete-*") is anchored to one whole command token.
115
+ * - Regex — anything that looks like a regex (contains "|", "\\", "^", "$",
116
+ * "(", ")", ".", "+", "?", "{", "}", "[", "]") OR is wrapped in /…/ or
117
+ * /…/i. Compiled and tested against `tokens.join(' ')`. The auto-detect
118
+ * covers the realistic case where a project's mustConfirm pattern is
119
+ * pipe-alternation (e.g. "make staging|make prod|git push|git commit")
120
+ * without explicit /…/ wrapping.
111
121
  *
112
122
  * Returning the matched pattern (verbatim) lets the dispatcher key bypass
113
123
  * telemetry / dedup against `recentPolicyChecks` exactly.
@@ -120,38 +130,98 @@ export function matchCommand(commandTokens, patterns) {
120
130
  const pattern = raw.trim();
121
131
  if (!pattern)
122
132
  continue;
123
- if (pattern.startsWith('/')) {
124
- // /regex/ or /regex/i
125
- const tail = pattern.endsWith('/i') ? '/i' : pattern.endsWith('/') ? '/' : null;
126
- if (!tail)
127
- continue;
128
- const body = pattern.slice(1, pattern.length - tail.length);
133
+ const explicitRegex = parseExplicitRegex(pattern);
134
+ if (explicitRegex !== null) {
129
135
  try {
130
- const re = new RegExp(body, tail === '/i' ? 'i' : '');
131
- if (re.test(joined))
136
+ if (new RegExp(explicitRegex.body, explicitRegex.flags).test(joined))
132
137
  return pattern;
133
138
  }
134
139
  catch {
135
- // Invalid regex pattern — skip rather than crash.
140
+ /* invalid regex — skip */
136
141
  }
137
142
  continue;
138
143
  }
139
- if (pattern.includes('*')) {
140
- const escapedSegments = pattern
141
- .split('*')
142
- .map((seg) => seg.replace(/[.+?^${}()|[\]\\]/g, '\\$&'));
143
- const re = new RegExp(`^${escapedSegments.join('.*')}$`);
144
- if (re.test(joined))
145
- return pattern;
144
+ if (looksLikeRegex(pattern)) {
145
+ try {
146
+ if (new RegExp(pattern).test(joined))
147
+ return pattern;
148
+ }
149
+ catch {
150
+ /* invalid regex — skip */
151
+ }
146
152
  continue;
147
153
  }
148
- // Plain substring — common case for forbiddenCommand patterns like
149
- // "git push origin main".
150
- if (joined.includes(pattern))
154
+ const patternTokens = pattern.split(/\s+/).filter(Boolean);
155
+ if (patternTokens.length === 0)
156
+ continue;
157
+ if (matchTokenSubsequence(commandTokens, patternTokens))
151
158
  return pattern;
152
159
  }
153
160
  return null;
154
161
  }
162
+ /**
163
+ * /regex/ or /regex/i — explicit opt-in to joined-form regex matching.
164
+ * Returns null when the pattern isn't wrapped this way.
165
+ */
166
+ function parseExplicitRegex(pattern) {
167
+ if (!pattern.startsWith('/'))
168
+ return null;
169
+ const tail = pattern.endsWith('/i') ? '/i' : pattern.endsWith('/') ? '/' : null;
170
+ if (!tail)
171
+ return null;
172
+ return { body: pattern.slice(1, pattern.length - tail.length), flags: tail === '/i' ? 'i' : '' };
173
+ }
174
+ /**
175
+ * Heuristic: does `pattern` contain regex metacharacters that aren't part of
176
+ * the plain-phrase / glob vocabulary? `*` alone is glob, not regex. The pipe
177
+ * is the most common case in real-world policies.
178
+ */
179
+ function looksLikeRegex(pattern) {
180
+ return /[|\\.^$()+?{}[\]]/.test(pattern);
181
+ }
182
+ /**
183
+ * True iff `patternTokens` appears as a contiguous sub-sequence of
184
+ * `commandTokens`. A "*" pattern token matches any single command token.
185
+ *
186
+ * Whole-token matches only — `git push` does NOT match a command token
187
+ * `'git push origin main'` (a single-quoted string), which is the property
188
+ * that protects us from the false-positive Bash regex trap. A pattern token
189
+ * is allowed to be a partial-string glob (`git*`) — those still only match
190
+ * a single whole command token, never crossing token boundaries.
191
+ */
192
+ function matchTokenSubsequence(commandTokens, patternTokens) {
193
+ const need = patternTokens.length;
194
+ if (need === 0)
195
+ return true;
196
+ for (let start = 0; start <= commandTokens.length - need; start++) {
197
+ let ok = true;
198
+ for (let i = 0; i < need; i++) {
199
+ const cmd = commandTokens[start + i] ?? '';
200
+ const pat = patternTokens[i] ?? '';
201
+ if (pat === '*')
202
+ continue;
203
+ if (pat.includes('*')) {
204
+ // Within-token glob, e.g. "delete-*" — anchored to the whole token.
205
+ const escaped = pat
206
+ .split('*')
207
+ .map((seg) => seg.replace(/[.+?^${}()|[\]\\]/g, '\\$&'))
208
+ .join('.*');
209
+ if (!new RegExp(`^${escaped}$`).test(cmd)) {
210
+ ok = false;
211
+ break;
212
+ }
213
+ continue;
214
+ }
215
+ if (cmd !== pat) {
216
+ ok = false;
217
+ break;
218
+ }
219
+ }
220
+ if (ok)
221
+ return true;
222
+ }
223
+ return false;
224
+ }
155
225
  /**
156
226
  * Built-in destructive patterns. Project-level policies extend this set;
157
227
  * they're never shrunk, so a project can only ADD restrictions to what's
@@ -1 +1 @@
1
- {"version":3,"file":"shellTokens.js","sourceRoot":"","sources":["../../src/lib/shellTokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shellTokens.js","sourceRoot":"","sources":["../../src/lib/shellTokens.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonik/claude-code-hooks",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Claude Code PreToolUse / PostToolUse hooks for Mnemonik forcing-functions (advisory grounding gate). filesToWrite delivery of skill/rules/.mnemonik.json continues to flow for ALL clients including Claude Code — this package adds host-side hook gating only. Versioned independently from the @mnemonik/server release cadence (mirrors @mnemonik/scanner).",
5
5
  "type": "module",
6
6
  "bin": {