@aicqtools/guardrail 1.0.0-alpha.12 → 1.0.0-alpha.16
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/docs/render-rule-md.d.ts.map +1 -1
- package/dist/docs/render-rule-md.js +80 -0
- package/dist/docs/render-rule-md.js.map +1 -1
- package/dist/rules-default/camelcase-migration-column.d.ts.map +1 -1
- package/dist/rules-default/camelcase-migration-column.js +26 -2
- package/dist/rules-default/camelcase-migration-column.js.map +1 -1
- package/dist/rules-default/mask-pii-in-ai-prompt.d.ts.map +1 -1
- package/dist/rules-default/mask-pii-in-ai-prompt.js +44 -7
- package/dist/rules-default/mask-pii-in-ai-prompt.js.map +1 -1
- package/dist/rules-default/no-console-log.d.ts.map +1 -1
- package/dist/rules-default/no-console-log.js +22 -2
- package/dist/rules-default/no-console-log.js.map +1 -1
- package/dist/rules-default/no-empty-catch.d.ts +6 -0
- package/dist/rules-default/no-empty-catch.d.ts.map +1 -1
- package/dist/rules-default/no-empty-catch.js +42 -2
- package/dist/rules-default/no-empty-catch.js.map +1 -1
- package/dist/rules-default/no-fstring-sql.d.ts.map +1 -1
- package/dist/rules-default/no-fstring-sql.js +51 -2
- package/dist/rules-default/no-fstring-sql.js.map +1 -1
- package/dist/rules-default/no-magic-number.d.ts.map +1 -1
- package/dist/rules-default/no-magic-number.js +24 -4
- package/dist/rules-default/no-magic-number.js.map +1 -1
- package/dist/runner/apply-rule-config.d.ts +43 -12
- package/dist/runner/apply-rule-config.d.ts.map +1 -1
- package/dist/runner/apply-rule-config.js +115 -41
- package/dist/runner/apply-rule-config.js.map +1 -1
- package/dist/runner/context.d.ts +7 -0
- package/dist/runner/context.d.ts.map +1 -1
- package/dist/runner/context.js +2 -0
- package/dist/runner/context.js.map +1 -1
- package/dist/runner/index.d.ts +4 -2
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/index.js +2 -1
- package/dist/runner/index.js.map +1 -1
- package/dist/runner/resolve-rule-options.d.ts +28 -0
- package/dist/runner/resolve-rule-options.d.ts.map +1 -0
- package/dist/runner/resolve-rule-options.js +27 -0
- package/dist/runner/resolve-rule-options.js.map +1 -0
- package/dist/runner/run-file.d.ts +10 -2
- package/dist/runner/run-file.d.ts.map +1 -1
- package/dist/runner/run-file.js +14 -4
- package/dist/runner/run-file.js.map +1 -1
- package/dist/runner/run-project.d.ts +14 -0
- package/dist/runner/run-project.d.ts.map +1 -1
- package/dist/runner/run-project.js +22 -5
- package/dist/runner/run-project.js.map +1 -1
- package/package.json +3 -3
|
@@ -2,7 +2,7 @@ import fastGlob from 'fast-glob';
|
|
|
2
2
|
import { readFile, stat } from 'node:fs/promises';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { FileCache, hashRulesetSignature } from '@aicqtools/core';
|
|
5
|
-
import {
|
|
5
|
+
import { applyOverridesForFileResolved } from './apply-rule-config.js';
|
|
6
6
|
import { runFile } from './run-file.js';
|
|
7
7
|
import { rulesetSignature } from './ruleset-signature.js';
|
|
8
8
|
export async function runProject(opts) {
|
|
@@ -17,23 +17,29 @@ export async function runProject(opts) {
|
|
|
17
17
|
});
|
|
18
18
|
const cache = opts.cache;
|
|
19
19
|
const overrides = opts.overrides ?? [];
|
|
20
|
+
const baselineRuleOptions = opts.ruleOptions ?? new Map();
|
|
21
|
+
const skipBuiltinSkips = opts.skipBuiltinSkips ?? false;
|
|
20
22
|
// Per-entry match counters (alpha.10). Allocated only when overrides is non-empty so the
|
|
21
23
|
// unused-feature fast path stays allocation-free. Slots that remain 0 after the scan are
|
|
22
24
|
// reported by the CLI as "matched no files — ignored." warnings.
|
|
23
25
|
const matchCounts = overrides.length > 0 ? new Array(overrides.length).fill(0) : undefined;
|
|
24
26
|
// The ruleset hash mixes in the overrides shape so cache entries invalidate when a user adds,
|
|
25
27
|
// removes, or edits override paths/rules. Without this, a stale entry could survive a config
|
|
26
|
-
// change that should have flipped a diagnostic on or off.
|
|
28
|
+
// change that should have flipped a diagnostic on or off. Alpha.14 also folds the per-rule
|
|
29
|
+
// options into the hash so flipping `options.allowedNumbers` invalidates stale entries.
|
|
27
30
|
const rulesHash = cache
|
|
28
31
|
? hashRulesetSignature([
|
|
29
32
|
...rulesetSignature(opts.rules),
|
|
30
33
|
'overrides=' + JSON.stringify(overrides),
|
|
34
|
+
'skipBuiltinSkips=' + String(skipBuiltinSkips),
|
|
35
|
+
'ruleOptions=' + serializeRuleOptions(baselineRuleOptions),
|
|
31
36
|
])
|
|
32
37
|
: '';
|
|
33
38
|
const diagnostics = [];
|
|
34
39
|
for (const file of files) {
|
|
35
40
|
try {
|
|
36
|
-
const fileRules =
|
|
41
|
+
const { rules: fileRules, ruleOptions: fileRuleOptions } = applyOverridesForFileResolved(opts.rules, overrides, file, matchCounts, baselineRuleOptions);
|
|
42
|
+
const runFileOpts = { skipBuiltinSkips, ruleOptions: fileRuleOptions };
|
|
37
43
|
if (cache) {
|
|
38
44
|
const st = await stat(file);
|
|
39
45
|
const cached = cache.get({
|
|
@@ -46,12 +52,12 @@ export async function runProject(opts) {
|
|
|
46
52
|
diagnostics.push(...cached);
|
|
47
53
|
continue;
|
|
48
54
|
}
|
|
49
|
-
const result = await runFile(file, fileRules);
|
|
55
|
+
const result = await runFile(file, fileRules, runFileOpts);
|
|
50
56
|
cache.set({ filePath: file, mtime: Math.floor(st.mtimeMs), size: st.size, rulesHash }, result.diagnostics);
|
|
51
57
|
diagnostics.push(...result.diagnostics);
|
|
52
58
|
}
|
|
53
59
|
else {
|
|
54
|
-
const result = await runFile(file, fileRules);
|
|
60
|
+
const result = await runFile(file, fileRules, runFileOpts);
|
|
55
61
|
diagnostics.push(...result.diagnostics);
|
|
56
62
|
}
|
|
57
63
|
}
|
|
@@ -104,6 +110,17 @@ export async function resolveIgnores(cwd, exclude, respectGitignore) {
|
|
|
104
110
|
}
|
|
105
111
|
return ignores;
|
|
106
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Deterministic JSON serialization of the per-rule options map (alpha.14). Map iteration order
|
|
115
|
+
* follows insertion order in V8, but a callsite could populate the map in different orders
|
|
116
|
+
* across runs (e.g. two overrides reordered). Sorting by ruleId keeps the cache hash stable.
|
|
117
|
+
*/
|
|
118
|
+
function serializeRuleOptions(map) {
|
|
119
|
+
if (map.size === 0)
|
|
120
|
+
return '{}';
|
|
121
|
+
const sorted = Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0]));
|
|
122
|
+
return JSON.stringify(sorted);
|
|
123
|
+
}
|
|
107
124
|
function parseFailedDiagnostic(file, err) {
|
|
108
125
|
const message = err instanceof Error ? err.message : String(err);
|
|
109
126
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-project.js","sourceRoot":"","sources":["../../src/runner/run-project.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run-project.js","sourceRoot":"","sources":["../../src/runner/run-project.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAoC1D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;QAC9C,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC;IACxD,yFAAyF;IACzF,yFAAyF;IACzF,iEAAiE;IACjE,MAAM,WAAW,GACf,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,8FAA8F;IAC9F,6FAA6F;IAC7F,2FAA2F;IAC3F,wFAAwF;IACxF,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,oBAAoB,CAAC;YACnB,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACxC,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC9C,cAAc,GAAG,oBAAoB,CAAC,mBAAmB,CAAC;SAC3D,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,6BAA6B,CACtF,IAAI,CAAC,KAAK,EACV,SAAS,EACT,IAAI,EACJ,WAAW,EACX,mBAAmB,CACpB,CAAC;YACF,MAAM,WAAW,GAAG,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;YACvE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;oBACvB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;oBAC7B,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,SAAS;iBACV,CAAC,CAAC;gBACH,IAAI,MAAM,EAAE,CAAC;oBACX,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC3D,KAAK,CAAC,GAAG,CACP,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAC3E,MAAM,CAAC,WAAW,CACnB,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,6FAA6F;YAC7F,kFAAkF;YAClF,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAC9B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,OAA0B,EAC1B,gBAAyB;IAEzB,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7B,IAAI,CAAC,gBAAgB;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,OAAO,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACxD,uFAAuF;YACvF,qFAAqF;YACrF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,4CAA4C;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8FAA8F;IAChG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,GAA2D;IAE3D,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,GAAY;IACvD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,oCAAoC,OAAO,EAAE;QACtD,SAAS,EAAE,qBAAqB,OAAO,EAAE;QACzC,IAAI;QACJ,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;KACtE,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aicqtools/guardrail",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Deterministic AI code guardrail engine — 37 built-in rules, hybrid YAML/function DSL, MCP server, .cursorrules sync, sqlite cache.",
|
|
6
6
|
"keywords": [
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"micromatch": "^4.0.8",
|
|
46
46
|
"yaml": "^2.6.1",
|
|
47
47
|
"zod": "^3.23.8",
|
|
48
|
-
"@aicqtools/core": "1.0.0-alpha.
|
|
49
|
-
"@aicqtools/rule-sdk": "1.0.0-alpha.
|
|
48
|
+
"@aicqtools/core": "1.0.0-alpha.16",
|
|
49
|
+
"@aicqtools/rule-sdk": "1.0.0-alpha.16"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
52
|
"tree-sitter": "~0.22.4"
|