@promptci/core 0.2.2 → 0.4.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/action-pinning.d.ts.map +1 -1
- package/dist/action-pinning.js +86 -55
- package/dist/action-pinning.js.map +1 -1
- package/dist/agent-practices.d.ts +5 -1
- package/dist/agent-practices.d.ts.map +1 -1
- package/dist/agent-practices.js +59 -34
- package/dist/agent-practices.js.map +1 -1
- package/dist/ai-config.d.ts +13 -6
- package/dist/ai-config.d.ts.map +1 -1
- package/dist/ai-config.js +25 -78
- package/dist/ai-config.js.map +1 -1
- package/dist/baseline.d.ts +8 -0
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +15 -0
- package/dist/baseline.js.map +1 -1
- package/dist/ci-alignment.d.ts +3 -1
- package/dist/ci-alignment.d.ts.map +1 -1
- package/dist/ci-alignment.js +8 -1
- package/dist/ci-alignment.js.map +1 -1
- package/dist/close-match.d.ts +97 -0
- package/dist/close-match.d.ts.map +1 -0
- package/dist/close-match.js +215 -0
- package/dist/close-match.js.map +1 -0
- package/dist/command-context.d.ts +67 -0
- package/dist/command-context.d.ts.map +1 -0
- package/dist/command-context.js +291 -0
- package/dist/command-context.js.map +1 -0
- package/dist/command-validity.d.ts.map +1 -1
- package/dist/command-validity.js +510 -32
- package/dist/command-validity.js.map +1 -1
- package/dist/context-optimizer.d.ts.map +1 -1
- package/dist/context-optimizer.js +9 -2
- package/dist/context-optimizer.js.map +1 -1
- package/dist/dead-references.d.ts +14 -1
- package/dist/dead-references.d.ts.map +1 -1
- package/dist/dead-references.js +264 -17
- package/dist/dead-references.js.map +1 -1
- package/dist/dependency-staleness.d.ts.map +1 -1
- package/dist/dependency-staleness.js +24 -38
- package/dist/dependency-staleness.js.map +1 -1
- package/dist/detectors.js +1 -1
- package/dist/detectors.js.map +1 -1
- package/dist/discovery.d.ts +138 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +569 -0
- package/dist/discovery.js.map +1 -0
- package/dist/duplicates.d.ts +24 -2
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +313 -9
- package/dist/duplicates.js.map +1 -1
- package/dist/fix-engine.d.ts.map +1 -1
- package/dist/fix-engine.js +75 -1
- package/dist/fix-engine.js.map +1 -1
- package/dist/frameworks/dotnet.d.ts.map +1 -1
- package/dist/frameworks/dotnet.js +10 -11
- package/dist/frameworks/dotnet.js.map +1 -1
- package/dist/frameworks/go.d.ts.map +1 -1
- package/dist/frameworks/go.js +8 -4
- package/dist/frameworks/go.js.map +1 -1
- package/dist/frameworks/nextjs.d.ts.map +1 -1
- package/dist/frameworks/nextjs.js +8 -17
- package/dist/frameworks/nextjs.js.map +1 -1
- package/dist/frameworks/python.d.ts.map +1 -1
- package/dist/frameworks/python.js +5 -3
- package/dist/frameworks/python.js.map +1 -1
- package/dist/frameworks/rust.d.ts.map +1 -1
- package/dist/frameworks/rust.js +3 -3
- package/dist/frameworks/rust.js.map +1 -1
- package/dist/frameworks/unity.d.ts.map +1 -1
- package/dist/frameworks/unity.js +6 -5
- package/dist/frameworks/unity.js.map +1 -1
- package/dist/gitignore.d.ts +31 -2
- package/dist/gitignore.d.ts.map +1 -1
- package/dist/gitignore.js +33 -8
- package/dist/gitignore.js.map +1 -1
- package/dist/health-score.d.ts +15 -1
- package/dist/health-score.d.ts.map +1 -1
- package/dist/health-score.js +25 -2
- package/dist/health-score.js.map +1 -1
- package/dist/hooks-settings-detector.d.ts.map +1 -1
- package/dist/hooks-settings-detector.js +5 -1
- package/dist/hooks-settings-detector.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/known-paths.d.ts +82 -0
- package/dist/known-paths.d.ts.map +1 -0
- package/dist/known-paths.js +152 -0
- package/dist/known-paths.js.map +1 -0
- package/dist/makefile.d.ts.map +1 -1
- package/dist/makefile.js +17 -13
- package/dist/makefile.js.map +1 -1
- package/dist/manifest-consistency.d.ts +1 -1
- package/dist/manifest-consistency.d.ts.map +1 -1
- package/dist/manifest-consistency.js +18 -8
- package/dist/manifest-consistency.js.map +1 -1
- package/dist/markdown-fences.d.ts.map +1 -1
- package/dist/markdown-fences.js +7 -3
- package/dist/markdown-fences.js.map +1 -1
- package/dist/mcp-config-detector.d.ts.map +1 -1
- package/dist/mcp-config-detector.js +5 -1
- package/dist/mcp-config-detector.js.map +1 -1
- package/dist/project-type.d.ts +2 -1
- package/dist/project-type.d.ts.map +1 -1
- package/dist/project-type.js +36 -48
- package/dist/project-type.js.map +1 -1
- package/dist/prompt-cache.d.ts.map +1 -1
- package/dist/prompt-cache.js +13 -2
- package/dist/prompt-cache.js.map +1 -1
- package/dist/provenance/check.d.ts +40 -0
- package/dist/provenance/check.d.ts.map +1 -0
- package/dist/provenance/check.js +157 -0
- package/dist/provenance/check.js.map +1 -0
- package/dist/provenance/index.d.ts +13 -0
- package/dist/provenance/index.d.ts.map +1 -0
- package/dist/provenance/index.js +21 -0
- package/dist/provenance/index.js.map +1 -0
- package/dist/provenance/instruction-advice.d.ts +3 -0
- package/dist/provenance/instruction-advice.d.ts.map +1 -0
- package/dist/provenance/instruction-advice.js +570 -0
- package/dist/provenance/instruction-advice.js.map +1 -0
- package/dist/provenance/repo-checks.d.ts +3 -0
- package/dist/provenance/repo-checks.d.ts.map +1 -0
- package/dist/provenance/repo-checks.js +644 -0
- package/dist/provenance/repo-checks.js.map +1 -0
- package/dist/provenance/tool-config.d.ts +3 -0
- package/dist/provenance/tool-config.d.ts.map +1 -0
- package/dist/provenance/tool-config.js +480 -0
- package/dist/provenance/tool-config.js.map +1 -0
- package/dist/provenance/types.d.ts +116 -0
- package/dist/provenance/types.d.ts.map +1 -0
- package/dist/provenance/types.js +17 -0
- package/dist/provenance/types.js.map +1 -0
- package/dist/repo-context.d.ts +9 -0
- package/dist/repo-context.d.ts.map +1 -1
- package/dist/repo-context.js +35 -41
- package/dist/repo-context.js.map +1 -1
- package/dist/repo-tree.d.ts +163 -9
- package/dist/repo-tree.d.ts.map +1 -1
- package/dist/repo-tree.js +226 -34
- package/dist/repo-tree.js.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +6 -0
- package/dist/report.js.map +1 -1
- package/dist/sample-text.d.ts +36 -0
- package/dist/sample-text.d.ts.map +1 -0
- package/dist/sample-text.js +72 -0
- package/dist/sample-text.js.map +1 -0
- package/dist/sarif.d.ts +27 -0
- package/dist/sarif.d.ts.map +1 -0
- package/dist/sarif.js +357 -0
- package/dist/sarif.js.map +1 -0
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -2
- package/dist/scan.js.map +1 -1
- package/dist/scanner.d.ts +4 -3
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +36 -77
- package/dist/scanner.js.map +1 -1
- package/dist/security-pack.d.ts.map +1 -1
- package/dist/security-pack.js +117 -35
- package/dist/security-pack.js.map +1 -1
- package/dist/skill-supply-chain.d.ts.map +1 -1
- package/dist/skill-supply-chain.js +29 -19
- package/dist/skill-supply-chain.js.map +1 -1
- package/dist/skills-detector.d.ts.map +1 -1
- package/dist/skills-detector.js +11 -3
- package/dist/skills-detector.js.map +1 -1
- package/dist/token-estimates.d.ts +42 -0
- package/dist/token-estimates.d.ts.map +1 -0
- package/dist/token-estimates.js +200 -0
- package/dist/token-estimates.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/workspace-manifests.d.ts +6 -0
- package/dist/workspace-manifests.d.ts.map +1 -1
- package/dist/workspace-manifests.js +13 -8
- package/dist/workspace-manifests.js.map +1 -1
- package/package.json +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../src/frameworks/dotnet.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../src/frameworks/dotnet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/frameworks/go.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/frameworks/go.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAyC9D"}
|
package/dist/frameworks/go.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { treeFor } from '../repo-tree.js';
|
|
2
|
+
// pcic-e6xa: the framework probes read fixed root names, so they go through
|
|
3
|
+
// the scan's tree: a marker file committed as a link out of the repository can
|
|
4
|
+
// no longer decide which framework pack runs, names match with exact case on
|
|
5
|
+
// every platform, and a caller's file inventory answers when the repository is
|
|
6
|
+
// not on disk (pcic-csf).
|
|
3
7
|
export function detectGo(context) {
|
|
4
8
|
const issues = [];
|
|
5
|
-
const {
|
|
6
|
-
const hasGoMod =
|
|
9
|
+
const { files } = context;
|
|
10
|
+
const hasGoMod = treeFor(context).isFile('go.mod');
|
|
7
11
|
const combinedContent = files.map(f => f.content).join('\n');
|
|
8
12
|
// FW1: "go" is an ordinary English verb ("let's go build something"), so a
|
|
9
13
|
// bare `\bgo\s+(build|test|run|get|mod)\b` match enabled the whole Go pack
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/frameworks/go.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/frameworks/go.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,0BAA0B;AAC1B,MAAM,UAAU,QAAQ,CAAC,OAAoB;IAC3C,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,aAAa,GACjB,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC;QACpC,sDAAsD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE/E,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5C,wDAAwD;IACxD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,6BAA6B;YACjC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,gGAAgG;YACzG,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,CAAC,8DAA8D,CAAC;YAC1E,cAAc,EAAE,8EAA8E;YAC9F,SAAS,EAAE,6EAA6E;YACxF,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/frameworks/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/frameworks/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAoElE"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as fs from 'node:fs';
|
|
1
|
+
import { treeFor } from '../repo-tree.js';
|
|
3
2
|
export function detectNextJs(context) {
|
|
4
3
|
const issues = [];
|
|
5
|
-
const { packageJson,
|
|
4
|
+
const { packageJson, files } = context;
|
|
6
5
|
const hasNextDep = !!(packageJson.dependencies['next'] || packageJson.devDependencies['next']);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'next.config.js')) ||
|
|
11
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'next.config.mjs')) ||
|
|
12
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'next.config.ts'));
|
|
6
|
+
// pcic-e6xa: see the note in frameworks/go.ts.
|
|
7
|
+
const tree = treeFor(context);
|
|
8
|
+
const hasNextConfig = ['', 'apps/web/'].some((prefix) => ['js', 'mjs', 'ts'].some((ext) => tree.isFile(`${prefix}next.config.${ext}`)));
|
|
13
9
|
if (!hasNextDep && !hasNextConfig) {
|
|
14
10
|
return [];
|
|
15
11
|
}
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'src', 'app'));
|
|
20
|
-
const hasPagesDir = fs.existsSync(path.join(repoRoot, 'pages')) ||
|
|
21
|
-
fs.existsSync(path.join(repoRoot, 'src', 'pages')) ||
|
|
22
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'pages')) ||
|
|
23
|
-
fs.existsSync(path.join(repoRoot, 'apps', 'web', 'src', 'pages'));
|
|
12
|
+
const routerDir = (name) => ['', 'src/', 'apps/web/', 'apps/web/src/'].some((prefix) => tree.isDir(`${prefix}${name}`));
|
|
13
|
+
const hasAppDir = routerDir('app');
|
|
14
|
+
const hasPagesDir = routerDir('pages');
|
|
24
15
|
// Check for missing App Router guidance
|
|
25
16
|
if (hasAppDir) {
|
|
26
17
|
const hasAppRouterGuidance = files.some(file => file.content.toLowerCase().includes('app router') ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/frameworks/nextjs.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/frameworks/nextjs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/frameworks/python.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/frameworks/python.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAuElE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
|
-
import
|
|
2
|
+
import { treeFor } from '../repo-tree.js';
|
|
3
3
|
export function detectPython(context) {
|
|
4
4
|
const issues = [];
|
|
5
5
|
const { manifests, repoRoot, files } = context;
|
|
@@ -8,8 +8,10 @@ export function detectPython(context) {
|
|
|
8
8
|
// RepoContext is built — the detector must not do synchronous disk I/O inside
|
|
9
9
|
// the scan pipeline. Presence is derived from that captured content.
|
|
10
10
|
const hasRequirements = manifests.requirements !== undefined;
|
|
11
|
-
|
|
12
|
-
const
|
|
11
|
+
// pcic-e6xa: see the note in frameworks/go.ts.
|
|
12
|
+
const tree = treeFor(context);
|
|
13
|
+
const hasPipfile = tree.isFile('Pipfile');
|
|
14
|
+
const hasCondaYaml = tree.isFile('environment.yml');
|
|
13
15
|
if (!hasPyProject && !hasRequirements && !hasPipfile && !hasCondaYaml) {
|
|
14
16
|
return [];
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/frameworks/python.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/frameworks/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/frameworks/rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/frameworks/rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CA2EhE"}
|
package/dist/frameworks/rust.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as path from 'node:path';
|
|
2
|
-
import * as fs from 'node:fs';
|
|
3
1
|
import { readTextWithinRoot } from '../ai-config.js';
|
|
2
|
+
import { treeFor } from '../repo-tree.js';
|
|
4
3
|
export function detectRust(context) {
|
|
5
4
|
const issues = [];
|
|
6
5
|
const { repoRoot, files } = context;
|
|
7
|
-
|
|
6
|
+
// pcic-e6xa: see the note in frameworks/go.ts.
|
|
7
|
+
const hasCargoToml = treeFor(context).isFile('Cargo.toml');
|
|
8
8
|
const combinedContent = files.map(f => f.content).join('\n');
|
|
9
9
|
const hasRustMentions = /\bcargo\.toml\b|\bcargo\s+(build|test|run|clippy|fmt)\b/i.test(combinedContent);
|
|
10
10
|
if (!hasCargoToml && !hasRustMentions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/frameworks/rust.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/frameworks/rust.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unity.d.ts","sourceRoot":"","sources":["../../src/frameworks/unity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"unity.d.ts","sourceRoot":"","sources":["../../src/frameworks/unity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAiFjE"}
|
package/dist/frameworks/unity.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as fs from 'node:fs';
|
|
1
|
+
import { treeFor } from '../repo-tree.js';
|
|
3
2
|
export function detectUnity(context) {
|
|
4
3
|
const issues = [];
|
|
5
|
-
const {
|
|
6
|
-
|
|
7
|
-
const
|
|
4
|
+
const { files } = context;
|
|
5
|
+
// pcic-e6xa: see the note in frameworks/go.ts.
|
|
6
|
+
const tree = treeFor(context);
|
|
7
|
+
const hasAssets = tree.isDir('Assets');
|
|
8
|
+
const hasProjectVersion = tree.isFile('ProjectSettings/ProjectVersion.txt');
|
|
8
9
|
const combinedContent = files.map(f => f.content).join('\n');
|
|
9
10
|
const hasUnityMentions = /\bunity\b.*\b(lts|editor|hub|engine)\b|\bmonobehaviour\b|\bunityengine\b|\bgameobject\b|\bprefab\b|\bscriptableobject\b/i.test(combinedContent);
|
|
10
11
|
if (!(hasAssets && hasProjectVersion) && !hasUnityMentions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unity.js","sourceRoot":"","sources":["../../src/frameworks/unity.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"unity.js","sourceRoot":"","sources":["../../src/frameworks/unity.ts"],"names":[],"mappings":"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"}
|
package/dist/gitignore.d.ts
CHANGED
|
@@ -17,6 +17,35 @@
|
|
|
17
17
|
* a leading `!` after an escape, and `#` mean something different there than
|
|
18
18
|
* they do to git, which treats them literally.
|
|
19
19
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
import type { RepoTree } from './repo-tree.js';
|
|
21
|
+
/**
|
|
22
|
+
* What the repository's ignore rules say about a path.
|
|
23
|
+
*
|
|
24
|
+
* `true`/`false` are answers. The other two say the answer is not available,
|
|
25
|
+
* because an ignore file that applies to the path exists and its text was not
|
|
26
|
+
* read — callers must not take either for "not ignored". They are kept apart
|
|
27
|
+
* for the same reason {@link RepoTree.readText} keeps them apart:
|
|
28
|
+
* - `'unreadable'` — the scan tried and failed. It is recorded, so a caller
|
|
29
|
+
* can raise the "check incomplete" warning that names what it could not read.
|
|
30
|
+
* - `'unfetched'` — a caller's inventory listed the file without fetching it
|
|
31
|
+
* (pcic-csf). Nothing failed and there is nothing to name, so callers stay
|
|
32
|
+
* silent.
|
|
33
|
+
*/
|
|
34
|
+
export type IgnoreVerdict = boolean | 'unreadable' | 'unfetched';
|
|
35
|
+
/**
|
|
36
|
+
* Build a checker over one repository; ignore files are read lazily and once
|
|
37
|
+
* each.
|
|
38
|
+
*
|
|
39
|
+
* pcic-e6xa: the `.gitignore` files are read through the scan's
|
|
40
|
+
* {@link RepoTree}, so a `.gitignore` committed as a link out of the
|
|
41
|
+
* repository is not read and a caller's file inventory is consulted first
|
|
42
|
+
* (pcic-csf) — the same source every other existence check in the scan uses.
|
|
43
|
+
*
|
|
44
|
+
* pcic-csf: a `.gitignore` the scan knows is there but has not got the bytes
|
|
45
|
+
* of (a hosted scan fetches only the instruction files) yields `'unknown'`, not
|
|
46
|
+
* an empty rule set. Treating it as "no rules" is what made such a scan report
|
|
47
|
+
* every reference to a gitignored generated file — `.beads/issues.jsonl`,
|
|
48
|
+
* `data/app.db` — as a broken reference.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createGitIgnoreChecker(tree: RepoTree): (repoRelativePath: string) => IgnoreVerdict;
|
|
22
51
|
//# sourceMappingURL=gitignore.d.ts.map
|
package/dist/gitignore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAyG/C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;AAKjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,gBAAgB,EAAE,MAAM,KAAK,aAAa,CAuClG"}
|
package/dist/gitignore.js
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
* a leading `!` after an escape, and `#` mean something different there than
|
|
18
18
|
* they do to git, which treats them literally.
|
|
19
19
|
*/
|
|
20
|
-
import { readTextWithinRoot } from './ai-config.js';
|
|
21
20
|
function escapeRegex(ch) {
|
|
22
21
|
return /[\\^$.*+?()[\]{}|/]/.test(ch) ? `\\${ch}` : ch;
|
|
23
22
|
}
|
|
@@ -123,26 +122,51 @@ function ruleMatches(rule, pathBelowIgnoreFile, isDir) {
|
|
|
123
122
|
const target = rule.anchored ? pathBelowIgnoreFile : pathBelowIgnoreFile.split('/').pop();
|
|
124
123
|
return rule.regex.test(target);
|
|
125
124
|
}
|
|
126
|
-
/**
|
|
127
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Build a checker over one repository; ignore files are read lazily and once
|
|
127
|
+
* each.
|
|
128
|
+
*
|
|
129
|
+
* pcic-e6xa: the `.gitignore` files are read through the scan's
|
|
130
|
+
* {@link RepoTree}, so a `.gitignore` committed as a link out of the
|
|
131
|
+
* repository is not read and a caller's file inventory is consulted first
|
|
132
|
+
* (pcic-csf) — the same source every other existence check in the scan uses.
|
|
133
|
+
*
|
|
134
|
+
* pcic-csf: a `.gitignore` the scan knows is there but has not got the bytes
|
|
135
|
+
* of (a hosted scan fetches only the instruction files) yields `'unknown'`, not
|
|
136
|
+
* an empty rule set. Treating it as "no rules" is what made such a scan report
|
|
137
|
+
* every reference to a gitignored generated file — `.beads/issues.jsonl`,
|
|
138
|
+
* `data/app.db` — as a broken reference.
|
|
139
|
+
*/
|
|
140
|
+
export function createGitIgnoreChecker(tree) {
|
|
128
141
|
const cache = new Map();
|
|
129
142
|
const rulesFor = (dir) => {
|
|
130
143
|
let rules = cache.get(dir);
|
|
131
|
-
if (
|
|
132
|
-
const
|
|
133
|
-
rules =
|
|
144
|
+
if (rules === undefined) {
|
|
145
|
+
const read = tree.readText(dir === '' ? '.gitignore' : `${dir}/.gitignore`);
|
|
146
|
+
rules = read.state === 'found' ? parseRules(read.content)
|
|
147
|
+
: read.state === 'unfetched' ? 'unfetched'
|
|
148
|
+
: read.state === 'unreadable' || read.state === 'too-large' ? 'unreadable'
|
|
149
|
+
: [];
|
|
134
150
|
cache.set(dir, rules);
|
|
135
151
|
}
|
|
136
152
|
return rules;
|
|
137
153
|
};
|
|
138
154
|
return (repoRelativePath) => {
|
|
139
155
|
const segments = repoRelativePath.replace(/\\/g, '/').replace(/^\.\//, '').split('/').filter(Boolean);
|
|
156
|
+
let unavailable;
|
|
140
157
|
for (let end = 1; end <= segments.length; end++) {
|
|
141
158
|
const isDir = end < segments.length; // every prefix but the last is a directory
|
|
142
159
|
let ignored;
|
|
143
160
|
for (let start = 0; start < end; start++) {
|
|
144
161
|
const below = segments.slice(start, end).join('/');
|
|
145
|
-
|
|
162
|
+
const rules = rulesFor(segments.slice(0, start).join('/'));
|
|
163
|
+
if (typeof rules === 'string') {
|
|
164
|
+
// A real read failure is the one worth naming, so it wins.
|
|
165
|
+
if (rules === 'unreadable' || unavailable === undefined)
|
|
166
|
+
unavailable = rules;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
for (const rule of rules) {
|
|
146
170
|
if (ruleMatches(rule, below, isDir))
|
|
147
171
|
ignored = !rule.negate;
|
|
148
172
|
}
|
|
@@ -151,7 +175,8 @@ export function createGitIgnoreChecker(repoRoot) {
|
|
|
151
175
|
if (ignored === true)
|
|
152
176
|
return true;
|
|
153
177
|
}
|
|
154
|
-
|
|
178
|
+
// Nothing matched, but an ignore file that could have matched went unread.
|
|
179
|
+
return unavailable ?? false;
|
|
155
180
|
};
|
|
156
181
|
}
|
|
157
182
|
//# sourceMappingURL=gitignore.js.map
|
package/dist/gitignore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"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"}
|
package/dist/health-score.d.ts
CHANGED
|
@@ -5,12 +5,24 @@
|
|
|
5
5
|
* for the same input regardless of call order.
|
|
6
6
|
*/
|
|
7
7
|
import type { PromptCiIssue, TopFix } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Tag on a finding that is reported but costs no health-score points
|
|
10
|
+
* (pcic-1ik0.3, PromptCI#158). Used for checks that fire on nearly every
|
|
11
|
+
* repository and so say little about any one of them: the repository-level
|
|
12
|
+
* "agent-practice guidance not found" finding and the per-workflow unpinned
|
|
13
|
+
* GitHub Actions finding. They still appear in the report, the JSON and SARIF,
|
|
14
|
+
* the baseline and `--fail-on`; they rank after every scored finding in top
|
|
15
|
+
* fixes.
|
|
16
|
+
*/
|
|
17
|
+
export declare const UNSCORED_TAG = "unscored";
|
|
18
|
+
/** False for a finding tagged {@link UNSCORED_TAG}, which the health score skips. */
|
|
19
|
+
export declare function isScored(issue: PromptCiIssue): boolean;
|
|
8
20
|
/**
|
|
9
21
|
* Compute a health score from 0–100 based on issue severity and confidence.
|
|
10
22
|
*
|
|
11
23
|
* Starts at 100. Each issue subtracts (severityWeight × confidence), subject to
|
|
12
24
|
* per-category caps so a single noisy detector cannot drive the score to zero on
|
|
13
|
-
* its own.
|
|
25
|
+
* its own. A finding tagged {@link UNSCORED_TAG} subtracts nothing.
|
|
14
26
|
*
|
|
15
27
|
* Result is clamped to [0, 100] and rounded to the nearest integer.
|
|
16
28
|
*/
|
|
@@ -23,6 +35,8 @@ export declare function getIssueImpact(issue: PromptCiIssue): 'high' | 'medium'
|
|
|
23
35
|
* Select up to 3 top fixes from the issue list.
|
|
24
36
|
*
|
|
25
37
|
* Priority order (descending):
|
|
38
|
+
* 0. Scored before unscored (an unscored finding is a top fix only when
|
|
39
|
+
* fewer than three categories have a scored one)
|
|
26
40
|
* 1. Severity weight (critical → high → warning → info)
|
|
27
41
|
* 2. Confidence (higher first)
|
|
28
42
|
* 3. Blast-radius impact (high → medium → low)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-score.d.ts","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"health-score.d.ts","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA+CtF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEtD;AAYD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAqBlE;AAQD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAiE9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CA0ChE"}
|
package/dist/health-score.js
CHANGED
|
@@ -32,7 +32,9 @@ const CATEGORY_DEDUCTION_CAP = {
|
|
|
32
32
|
* - `supply-chain` (8): unpinned GitHub Actions are `security` findings, but
|
|
33
33
|
* they describe CI configuration, not instruction health: uncapped, one
|
|
34
34
|
* finding per unpinned action took ~25 points off an otherwise healthy repo
|
|
35
|
-
* that simply uses tag-pinned third-party actions.
|
|
35
|
+
* that simply uses tag-pinned third-party actions. Since pcic-1ik0.3 they are
|
|
36
|
+
* unscored as well; the cap still bounds an action-pin finding from an
|
|
37
|
+
* earlier release that a consumer re-scores (it carries no unscored tag).
|
|
36
38
|
* - `skill-supply-chain` (15): findings about installed third-party skills,
|
|
37
39
|
* not the repo's own instruction health: uncapped, one noisy skill could
|
|
38
40
|
* zero an otherwise healthy score.
|
|
@@ -44,6 +46,20 @@ const TAG_DEDUCTION_CAP = {
|
|
|
44
46
|
'supply-chain': 8,
|
|
45
47
|
'skill-supply-chain': 15,
|
|
46
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* Tag on a finding that is reported but costs no health-score points
|
|
51
|
+
* (pcic-1ik0.3, PromptCI#158). Used for checks that fire on nearly every
|
|
52
|
+
* repository and so say little about any one of them: the repository-level
|
|
53
|
+
* "agent-practice guidance not found" finding and the per-workflow unpinned
|
|
54
|
+
* GitHub Actions finding. They still appear in the report, the JSON and SARIF,
|
|
55
|
+
* the baseline and `--fail-on`; they rank after every scored finding in top
|
|
56
|
+
* fixes.
|
|
57
|
+
*/
|
|
58
|
+
export const UNSCORED_TAG = 'unscored';
|
|
59
|
+
/** False for a finding tagged {@link UNSCORED_TAG}, which the health score skips. */
|
|
60
|
+
export function isScored(issue) {
|
|
61
|
+
return !(issue.tags ?? []).includes(UNSCORED_TAG);
|
|
62
|
+
}
|
|
47
63
|
/** The cap bucket an issue's deduction counts against, if any. */
|
|
48
64
|
function deductionBucket(issue) {
|
|
49
65
|
for (const tag of issue.tags ?? []) {
|
|
@@ -59,7 +75,7 @@ function deductionBucket(issue) {
|
|
|
59
75
|
*
|
|
60
76
|
* Starts at 100. Each issue subtracts (severityWeight × confidence), subject to
|
|
61
77
|
* per-category caps so a single noisy detector cannot drive the score to zero on
|
|
62
|
-
* its own.
|
|
78
|
+
* its own. A finding tagged {@link UNSCORED_TAG} subtracts nothing.
|
|
63
79
|
*
|
|
64
80
|
* Result is clamped to [0, 100] and rounded to the nearest integer.
|
|
65
81
|
*/
|
|
@@ -67,6 +83,8 @@ export function computeHealthScore(issues) {
|
|
|
67
83
|
let score = 100;
|
|
68
84
|
const categoryDeductions = new Map();
|
|
69
85
|
for (const issue of issues) {
|
|
86
|
+
if (!isScored(issue))
|
|
87
|
+
continue;
|
|
70
88
|
const deduction = (SEVERITY_WEIGHT[issue.severity] ?? 0) * issue.confidence;
|
|
71
89
|
const bucket = deductionBucket(issue);
|
|
72
90
|
if (bucket !== undefined) {
|
|
@@ -145,6 +163,8 @@ export function getIssueImpact(issue) {
|
|
|
145
163
|
* Select up to 3 top fixes from the issue list.
|
|
146
164
|
*
|
|
147
165
|
* Priority order (descending):
|
|
166
|
+
* 0. Scored before unscored (an unscored finding is a top fix only when
|
|
167
|
+
* fewer than three categories have a scored one)
|
|
148
168
|
* 1. Severity weight (critical → high → warning → info)
|
|
149
169
|
* 2. Confidence (higher first)
|
|
150
170
|
* 3. Blast-radius impact (high → medium → low)
|
|
@@ -157,6 +177,9 @@ export function getIssueImpact(issue) {
|
|
|
157
177
|
*/
|
|
158
178
|
export function selectTopFixes(issues) {
|
|
159
179
|
const sorted = [...issues].sort((a, b) => {
|
|
180
|
+
const scoredDiff = Number(isScored(b)) - Number(isScored(a));
|
|
181
|
+
if (scoredDiff !== 0)
|
|
182
|
+
return scoredDiff;
|
|
160
183
|
const weightDiff = (SEVERITY_WEIGHT[b.severity] ?? 0) - (SEVERITY_WEIGHT[a.severity] ?? 0);
|
|
161
184
|
if (weightDiff !== 0)
|
|
162
185
|
return weightDiff;
|
package/dist/health-score.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-score.js","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,eAAe,GAAkC;IACrD,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAA2C;IACrE,SAAS,EAAE,EAAE,EAAW,kBAAkB;IAC1C,iBAAiB,EAAE,EAAE;IACrB,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,EAAE,EAAW,kDAAkD;CAC3E,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"health-score.js","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-settings-detector.d.ts","sourceRoot":"","sources":["../src/hooks-settings-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks-settings-detector.d.ts","sourceRoot":"","sources":["../src/hooks-settings-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA2IhD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CA4FzE"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* is higher-stakes than a stale doc line. Deterministic and offline.
|
|
13
13
|
*/
|
|
14
14
|
import { readTextWithinRoot, isFileWithinRoot, shortHash, lineOf, withScannerPaths, SCRIPT_EXT_RE, aiConfigIssue as base, } from './ai-config.js';
|
|
15
|
+
import { treeFor } from './repo-tree.js';
|
|
15
16
|
/** curl/wget piped straight into a shell — the classic remote-code-execution footgun. */
|
|
16
17
|
const CURL_PIPE_SH_RE = /\b(curl|wget)\b[^|]*\|\s*(sudo\s+)?(sh|bash|zsh|dash)\b/i;
|
|
17
18
|
function id(kind, key) {
|
|
@@ -140,6 +141,9 @@ function hasUnquotedProjectDir(command) {
|
|
|
140
141
|
}
|
|
141
142
|
export function detectHooksSettings(context) {
|
|
142
143
|
const issues = [];
|
|
144
|
+
// pcic-e6xa: one tree for the whole run, so its directory listings are read
|
|
145
|
+
// once and every reference below is looked up inside the scan root only.
|
|
146
|
+
const tree = treeFor(context);
|
|
143
147
|
for (const filePath of context.aiConfig.settings) {
|
|
144
148
|
const raw = readTextWithinRoot(context.repoRoot, filePath);
|
|
145
149
|
if (raw === undefined)
|
|
@@ -203,7 +207,7 @@ export function detectHooksSettings(context) {
|
|
|
203
207
|
}
|
|
204
208
|
// Missing local script references.
|
|
205
209
|
for (const ref of extractScriptRefs(command)) {
|
|
206
|
-
if (isFileWithinRoot(
|
|
210
|
+
if (isFileWithinRoot(tree, ref))
|
|
207
211
|
continue;
|
|
208
212
|
const key = `${filePath}|${ref}`;
|
|
209
213
|
if (reportedMissing.has(key))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-settings-detector.js","sourceRoot":"","sources":["../src/hooks-settings-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,aAAa,IAAI,IAAI,GACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks-settings-detector.js","sourceRoot":"","sources":["../src/hooks-settings-detector.ts"],"names":[],"mappings":"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"}
|