@node9/policy-engine 2.19.2 → 2.20.0

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.
package/dist/index.d.mts CHANGED
@@ -1351,7 +1351,7 @@ declare const LONG_OUTPUT_THRESHOLD_BYTES: number;
1351
1351
  * and fails CI when the hash drifts without a version bump — forgetting
1352
1352
  * is loud, not silent.
1353
1353
  */
1354
- declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
1354
+ declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v16";
1355
1355
  /**
1356
1356
  * SHA-256 prefix of the detector-source files
1357
1357
  * (canonical.ts + pii.ts + destructive-regex.ts).
@@ -1362,7 +1362,7 @@ declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
1362
1362
  * files changed, this hash must change too, and you must consciously
1363
1363
  * decide whether to bump CANONICAL_EXTRACTOR_VERSION."
1364
1364
  */
1365
- declare const CANONICAL_EXTRACTOR_HASH = "2823cd6a54a1fca7";
1365
+ declare const CANONICAL_EXTRACTOR_HASH = "5d450ab100864451";
1366
1366
  declare function extractCanonicalFindings(call: ToolCallEntry, ctx: ExtractContext): CanonicalFinding[];
1367
1367
  declare function extractSessionLevelFindings(calls: ReadonlyArray<SessionToolCall>, ctx: SessionExtractContext): CanonicalFinding[];
1368
1368
  /**
package/dist/index.d.ts CHANGED
@@ -1351,7 +1351,7 @@ declare const LONG_OUTPUT_THRESHOLD_BYTES: number;
1351
1351
  * and fails CI when the hash drifts without a version bump — forgetting
1352
1352
  * is loud, not silent.
1353
1353
  */
1354
- declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
1354
+ declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v16";
1355
1355
  /**
1356
1356
  * SHA-256 prefix of the detector-source files
1357
1357
  * (canonical.ts + pii.ts + destructive-regex.ts).
@@ -1362,7 +1362,7 @@ declare const CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
1362
1362
  * files changed, this hash must change too, and you must consciously
1363
1363
  * decide whether to bump CANONICAL_EXTRACTOR_VERSION."
1364
1364
  */
1365
- declare const CANONICAL_EXTRACTOR_HASH = "2823cd6a54a1fca7";
1365
+ declare const CANONICAL_EXTRACTOR_HASH = "5d450ab100864451";
1366
1366
  declare function extractCanonicalFindings(call: ToolCallEntry, ctx: ExtractContext): CanonicalFinding[];
1367
1367
  declare function extractSessionLevelFindings(calls: ReadonlyArray<SessionToolCall>, ctx: SessionExtractContext): CanonicalFinding[];
1368
1368
  /**
package/dist/index.js CHANGED
@@ -1874,7 +1874,14 @@ var FS_OP_PRESCREEN_RE = new RegExp(
1874
1874
  // reader right after `"` / `'`, and without these two characters the
1875
1875
  // prescreen rejected every string-wrapped read before the parser ran.
1876
1876
  // Found 2026-09-11 by instrumenting the walk -- no CallExpr was ever visited.
1877
- `(?:^|[\\s|;&("'\`\\n/])(?:rm|${[...FS_READ_TOOLS, ...COPY_VERB_HEADS].map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\b|(?<!<)<(?!<)`
1877
+ `(?:^|[\\s|;&("'\`\\n/])(?:rm|${[...FS_READ_TOOLS, ...COPY_VERB_HEADS].map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\b|(?<!<)<(?!<)`,
1878
+ // Case-insensitive on purpose. Without `i`, `CAT .env` failed this fast path
1879
+ // and analyzeFsOperation returned before the AST ran at all — a live bypass
1880
+ // on macOS and Windows, whose filesystems resolve `CAT` to `cat`, and on
1881
+ // PowerShell, which is case-insensitive by language. Linux is unaffected in
1882
+ // practice (`CAT` is not an executable there) but folding costs nothing.
1883
+ // Dogfound 2026-09-22; pinned by verb-case-coverage.spec.ts.
1884
+ "i"
1878
1885
  );
1879
1886
  var HOME_CACHE_ALLOWLIST = [
1880
1887
  ".cache",
@@ -5738,8 +5745,8 @@ function matchCanaryArgs(args, values) {
5738
5745
 
5739
5746
  // src/scan/canonical.ts
5740
5747
  var LONG_OUTPUT_THRESHOLD_BYTES = 100 * 1024;
5741
- var CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
5742
- var CANONICAL_EXTRACTOR_HASH = "2823cd6a54a1fca7";
5748
+ var CANONICAL_EXTRACTOR_VERSION = "canonical-v16";
5749
+ var CANONICAL_EXTRACTOR_HASH = "5d450ab100864451";
5743
5750
  var DEDUPE_PREVIEW_LEN = 120;
5744
5751
  function extractCanonicalFindings(call, ctx) {
5745
5752
  const out = [];
package/dist/index.mjs CHANGED
@@ -1732,7 +1732,14 @@ var FS_OP_PRESCREEN_RE = new RegExp(
1732
1732
  // reader right after `"` / `'`, and without these two characters the
1733
1733
  // prescreen rejected every string-wrapped read before the parser ran.
1734
1734
  // Found 2026-09-11 by instrumenting the walk -- no CallExpr was ever visited.
1735
- `(?:^|[\\s|;&("'\`\\n/])(?:rm|${[...FS_READ_TOOLS, ...COPY_VERB_HEADS].map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\b|(?<!<)<(?!<)`
1735
+ `(?:^|[\\s|;&("'\`\\n/])(?:rm|${[...FS_READ_TOOLS, ...COPY_VERB_HEADS].map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\b|(?<!<)<(?!<)`,
1736
+ // Case-insensitive on purpose. Without `i`, `CAT .env` failed this fast path
1737
+ // and analyzeFsOperation returned before the AST ran at all — a live bypass
1738
+ // on macOS and Windows, whose filesystems resolve `CAT` to `cat`, and on
1739
+ // PowerShell, which is case-insensitive by language. Linux is unaffected in
1740
+ // practice (`CAT` is not an executable there) but folding costs nothing.
1741
+ // Dogfound 2026-09-22; pinned by verb-case-coverage.spec.ts.
1742
+ "i"
1736
1743
  );
1737
1744
  var HOME_CACHE_ALLOWLIST = [
1738
1745
  ".cache",
@@ -5596,8 +5603,8 @@ function matchCanaryArgs(args, values) {
5596
5603
 
5597
5604
  // src/scan/canonical.ts
5598
5605
  var LONG_OUTPUT_THRESHOLD_BYTES = 100 * 1024;
5599
- var CANONICAL_EXTRACTOR_VERSION = "canonical-v15";
5600
- var CANONICAL_EXTRACTOR_HASH = "2823cd6a54a1fca7";
5606
+ var CANONICAL_EXTRACTOR_VERSION = "canonical-v16";
5607
+ var CANONICAL_EXTRACTOR_HASH = "5d450ab100864451";
5601
5608
  var DEDUPE_PREVIEW_LEN = 120;
5602
5609
  function extractCanonicalFindings(call, ctx) {
5603
5610
  const out = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node9/policy-engine",
3
- "version": "2.19.2",
3
+ "version": "2.20.0",
4
4
  "description": "Shared policy evaluation engine for node9 — DLP, smart rules, AST shell parsing, shields, loop detection. Pure functions, no I/O. Used by both node9-proxy and the node9 SaaS firewall.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://node9.ai",