@promptci/core 0.1.0 → 0.2.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 +37 -0
- package/dist/action-pinning.d.ts.map +1 -0
- package/dist/action-pinning.js +277 -0
- package/dist/action-pinning.js.map +1 -0
- package/dist/agent-practices.d.ts +1 -1
- package/dist/agent-practices.d.ts.map +1 -1
- package/dist/agent-practices.js +107 -43
- package/dist/agent-practices.js.map +1 -1
- package/dist/ai-config.d.ts +42 -3
- package/dist/ai-config.d.ts.map +1 -1
- package/dist/ai-config.js +210 -12
- package/dist/ai-config.js.map +1 -1
- package/dist/alias-files.d.ts +33 -0
- package/dist/alias-files.d.ts.map +1 -0
- package/dist/alias-files.js +60 -0
- package/dist/alias-files.js.map +1 -0
- package/dist/buried-critical.d.ts.map +1 -1
- package/dist/buried-critical.js +4 -9
- package/dist/buried-critical.js.map +1 -1
- package/dist/canonical-owner.d.ts.map +1 -1
- package/dist/canonical-owner.js +45 -25
- package/dist/canonical-owner.js.map +1 -1
- package/dist/ci-alignment.d.ts.map +1 -1
- package/dist/ci-alignment.js +3 -2
- package/dist/ci-alignment.js.map +1 -1
- package/dist/command-validity.d.ts +16 -0
- package/dist/command-validity.d.ts.map +1 -1
- package/dist/command-validity.js +337 -63
- package/dist/command-validity.js.map +1 -1
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +3 -2
- package/dist/conflicts.js.map +1 -1
- package/dist/context-bloat.d.ts +1 -1
- package/dist/context-bloat.d.ts.map +1 -1
- package/dist/context-bloat.js +18 -7
- package/dist/context-bloat.js.map +1 -1
- package/dist/context-optimizer.d.ts.map +1 -1
- package/dist/context-optimizer.js +5 -2
- package/dist/context-optimizer.js.map +1 -1
- package/dist/custom-rules.d.ts.map +1 -1
- package/dist/custom-rules.js +6 -1
- package/dist/custom-rules.js.map +1 -1
- package/dist/dead-references.d.ts +8 -2
- package/dist/dead-references.d.ts.map +1 -1
- package/dist/dead-references.js +306 -61
- package/dist/dead-references.js.map +1 -1
- package/dist/dependency-staleness.d.ts +35 -0
- package/dist/dependency-staleness.d.ts.map +1 -0
- package/dist/dependency-staleness.js +1001 -0
- package/dist/dependency-staleness.js.map +1 -0
- package/dist/detectors.d.ts.map +1 -1
- package/dist/detectors.js +31 -6
- package/dist/detectors.js.map +1 -1
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +5 -4
- package/dist/duplicates.js.map +1 -1
- package/dist/evidence.d.ts +11 -0
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +40 -0
- package/dist/evidence.js.map +1 -1
- package/dist/finding-id.d.ts +21 -0
- package/dist/finding-id.d.ts.map +1 -0
- package/dist/finding-id.js +31 -0
- package/dist/finding-id.js.map +1 -0
- package/dist/frameworks/dotnet.js +2 -2
- package/dist/frameworks/dotnet.js.map +1 -1
- package/dist/frameworks/rust.d.ts.map +1 -1
- package/dist/frameworks/rust.js +2 -1
- package/dist/frameworks/rust.js.map +1 -1
- package/dist/git-symlinks.d.ts +30 -0
- package/dist/git-symlinks.d.ts.map +1 -0
- package/dist/git-symlinks.js +161 -0
- package/dist/git-symlinks.js.map +1 -0
- package/dist/gitignore.d.ts +22 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +157 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/health-score.d.ts.map +1 -1
- package/dist/health-score.js +34 -5
- package/dist/health-score.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/makefile.d.ts +37 -0
- package/dist/makefile.d.ts.map +1 -0
- package/dist/makefile.js +156 -0
- package/dist/makefile.js.map +1 -0
- package/dist/manifest-consistency.d.ts.map +1 -1
- package/dist/manifest-consistency.js +52 -8
- package/dist/manifest-consistency.js.map +1 -1
- package/dist/negative-instructions.d.ts.map +1 -1
- package/dist/negative-instructions.js +4 -9
- package/dist/negative-instructions.js.map +1 -1
- package/dist/path-containment.d.ts +29 -0
- package/dist/path-containment.d.ts.map +1 -1
- package/dist/path-containment.js +70 -0
- package/dist/path-containment.js.map +1 -1
- package/dist/prompt-cache.d.ts.map +1 -1
- package/dist/prompt-cache.js +8 -6
- package/dist/prompt-cache.js.map +1 -1
- package/dist/repo-context.d.ts +53 -0
- package/dist/repo-context.d.ts.map +1 -1
- package/dist/repo-context.js +134 -11
- package/dist/repo-context.js.map +1 -1
- package/dist/report.d.ts +7 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +36 -7
- package/dist/report.js.map +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +41 -2
- package/dist/scan.js.map +1 -1
- package/dist/scanner.d.ts +49 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +323 -38
- package/dist/scanner.js.map +1 -1
- package/dist/security-pack.d.ts.map +1 -1
- package/dist/security-pack.js +6 -4
- package/dist/security-pack.js.map +1 -1
- package/dist/skill-supply-chain.d.ts +132 -0
- package/dist/skill-supply-chain.d.ts.map +1 -0
- package/dist/skill-supply-chain.js +2954 -0
- package/dist/skill-supply-chain.js.map +1 -0
- package/dist/skills-detector.d.ts +7 -3
- package/dist/skills-detector.d.ts.map +1 -1
- package/dist/skills-detector.js +98 -22
- package/dist/skills-detector.js.map +1 -1
- package/dist/stale-instructions.d.ts.map +1 -1
- package/dist/stale-instructions.js +2 -1
- package/dist/stale-instructions.js.map +1 -1
- package/dist/suppression.d.ts +2 -0
- package/dist/suppression.d.ts.map +1 -1
- package/dist/suppression.js +5 -2
- package/dist/suppression.js.map +1 -1
- package/dist/types.d.ts +35 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -1
- package/dist/vague-guidance.d.ts.map +1 -1
- package/dist/vague-guidance.js +2 -1
- package/dist/vague-guidance.js.map +1 -1
- package/dist/windsurf-detector.d.ts.map +1 -1
- package/dist/windsurf-detector.js +15 -6
- package/dist/windsurf-detector.js.map +1 -1
- package/dist/within-section-dedup.d.ts.map +1 -1
- package/dist/within-section-dedup.js +4 -9
- package/dist/within-section-dedup.js.map +1 -1
- package/dist/workspace-manifests.d.ts +80 -0
- package/dist/workspace-manifests.d.ts.map +1 -0
- package/dist/workspace-manifests.js +333 -0
- package/dist/workspace-manifests.js.map +1 -0
- package/package.json +1 -1
package/dist/prompt-cache.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { INSTRUCTION_FILE_TYPES } from './types.js';
|
|
1
2
|
import { matchEvidence } from './evidence.js';
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
import * as crypto from 'node:crypto';
|
|
5
|
+
import { fileIdPath } from './finding-id.js';
|
|
4
6
|
/**
|
|
5
7
|
* B4: every id in this file was keyed by `${file.fileType}` — two files
|
|
6
8
|
* sharing a fileType (e.g. CLAUDE.md and .claude/notes.md, both 'claude')
|
|
@@ -38,14 +40,14 @@ const LOCAL_PATH_PATTERN = /(?:[a-zA-Z]:\\users\\[a-zA-Z0-9_-]+)|(?:\/users\/[a-
|
|
|
38
40
|
export function detectPromptCacheFriendliness(files) {
|
|
39
41
|
const issues = [];
|
|
40
42
|
// Focus only on persistent, always-loaded instruction files
|
|
41
|
-
const targetFiles = files.filter((f) =>
|
|
43
|
+
const targetFiles = files.filter((f) => INSTRUCTION_FILE_TYPES.has(f.fileType));
|
|
42
44
|
for (const file of targetFiles) {
|
|
43
45
|
const fileName = path.basename(file.path);
|
|
44
46
|
// 1. Timestamps and Dates
|
|
45
47
|
for (const pat of DATE_PATTERNS) {
|
|
46
48
|
if (pat.re.test(file.content)) {
|
|
47
49
|
issues.push({
|
|
48
|
-
id: promptCacheIssueId('volatile-timestamp', file
|
|
50
|
+
id: promptCacheIssueId('volatile-timestamp', fileIdPath(file)),
|
|
49
51
|
severity: 'warning',
|
|
50
52
|
category: 'context_bloat',
|
|
51
53
|
title: 'Volatile timestamp in instruction file',
|
|
@@ -64,7 +66,7 @@ export function detectPromptCacheFriendliness(files) {
|
|
|
64
66
|
for (const pat of SCAN_REPORT_PATTERNS) {
|
|
65
67
|
if (pat.re.test(file.content)) {
|
|
66
68
|
issues.push({
|
|
67
|
-
id: promptCacheIssueId('pasted-report', file
|
|
69
|
+
id: promptCacheIssueId('pasted-report', fileIdPath(file)),
|
|
68
70
|
severity: 'warning',
|
|
69
71
|
category: 'context_bloat',
|
|
70
72
|
title: 'Pasted scan report or summary in instructions',
|
|
@@ -83,7 +85,7 @@ export function detectPromptCacheFriendliness(files) {
|
|
|
83
85
|
for (const pat of BRANCH_TASK_PATTERNS) {
|
|
84
86
|
if (pat.re.test(file.content)) {
|
|
85
87
|
issues.push({
|
|
86
|
-
id: promptCacheIssueId('volatile-branch-task', file
|
|
88
|
+
id: promptCacheIssueId('volatile-branch-task', fileIdPath(file)),
|
|
87
89
|
severity: 'warning',
|
|
88
90
|
category: 'context_bloat',
|
|
89
91
|
title: 'Volatile branch or task status in instructions',
|
|
@@ -102,7 +104,7 @@ export function detectPromptCacheFriendliness(files) {
|
|
|
102
104
|
if (LOCAL_PATH_PATTERN.test(file.content)) {
|
|
103
105
|
const match = file.content.match(LOCAL_PATH_PATTERN)?.[0] ?? '';
|
|
104
106
|
issues.push({
|
|
105
|
-
id: promptCacheIssueId('local-paths', file
|
|
107
|
+
id: promptCacheIssueId('local-paths', fileIdPath(file)),
|
|
106
108
|
severity: 'warning',
|
|
107
109
|
category: 'context_bloat',
|
|
108
110
|
title: 'Local machine paths in instructions',
|
|
@@ -139,7 +141,7 @@ export function detectPromptCacheFriendliness(files) {
|
|
|
139
141
|
}
|
|
140
142
|
if (maxTableRows > 15) {
|
|
141
143
|
issues.push({
|
|
142
|
-
id: promptCacheIssueId('large-table', file
|
|
144
|
+
id: promptCacheIssueId('large-table', fileIdPath(file)),
|
|
143
145
|
severity: 'warning',
|
|
144
146
|
category: 'context_bloat',
|
|
145
147
|
title: 'Large table in instruction file',
|
package/dist/prompt-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-cache.js","sourceRoot":"","sources":["../src/prompt-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-cache.js","sourceRoot":"","sources":["../src/prompt-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-context.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { AiConfigFiles } from './ai-config.js';
|
|
2
2
|
import type { ManifestData } from './manifest-consistency.js';
|
|
3
|
+
import type { WorkspaceManifest } from './workspace-manifests.js';
|
|
4
|
+
import type { MakefileFacts } from './makefile.js';
|
|
3
5
|
import type { InstructionFile, ProjectType, ScanInput, ScanMetrics } from './types.js';
|
|
4
6
|
import type { CustomRule } from './custom-rules.js';
|
|
5
7
|
export type PackageManagerName = 'pnpm' | 'npm' | 'yarn' | 'bun' | 'unknown';
|
|
@@ -19,9 +21,23 @@ export type WorkflowCommand = {
|
|
|
19
21
|
command: string;
|
|
20
22
|
line: number;
|
|
21
23
|
};
|
|
24
|
+
/** Raw text of one GitHub Actions workflow file. */
|
|
25
|
+
export type WorkflowSource = {
|
|
26
|
+
/** Repo-relative, forward slashes (e.g. `.github/workflows/ci.yml`). */
|
|
27
|
+
filePath: string;
|
|
28
|
+
content: string;
|
|
29
|
+
};
|
|
22
30
|
export type WorkflowFacts = {
|
|
23
31
|
files: string[];
|
|
24
32
|
commands: WorkflowCommand[];
|
|
33
|
+
/**
|
|
34
|
+
* Workflow and composite-action (`action.yml`) file contents for detectors
|
|
35
|
+
* that audit the YAML itself (action pinning). These are CI configuration,
|
|
36
|
+
* never instruction files: they are NOT in `RepoContext.files`, so no prose
|
|
37
|
+
* detector ever reads them. Honors the scan's `exclude` patterns. Optional
|
|
38
|
+
* so hand-built contexts without it keep type-checking.
|
|
39
|
+
*/
|
|
40
|
+
sources?: WorkflowSource[];
|
|
25
41
|
};
|
|
26
42
|
export type RepoContext = {
|
|
27
43
|
repoRoot: string;
|
|
@@ -30,12 +46,34 @@ export type RepoContext = {
|
|
|
30
46
|
manifests: ManifestData;
|
|
31
47
|
packageJson: PackageJsonFacts;
|
|
32
48
|
workflows: WorkflowFacts;
|
|
49
|
+
/**
|
|
50
|
+
* The root package.json plus every workspace package manifest (scripts,
|
|
51
|
+
* dependency names, binaries). Lets the script-validity checks resolve
|
|
52
|
+
* `--filter`/`-r` commands and package binaries the way the package manager
|
|
53
|
+
* would. Optional so hand-built contexts without it keep type-checking.
|
|
54
|
+
*/
|
|
55
|
+
workspaces?: WorkspaceManifest[];
|
|
56
|
+
/**
|
|
57
|
+
* Workspace discovery stopped at its manifest cap, so `workspaces` is a
|
|
58
|
+
* sample. Checks that need the complete set (is this binary installed?) stay
|
|
59
|
+
* permissive when this is set.
|
|
60
|
+
*/
|
|
61
|
+
workspacesTruncated?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Targets of the repo-root Makefile (GNUmakefile / makefile / Makefile), for
|
|
64
|
+
* validating documented `make <target>` commands. Undefined when the root has
|
|
65
|
+
* no Makefile. Makefiles in subdirectories (`make -C dir`, `cd dir && make`)
|
|
66
|
+
* are read on demand by the check itself.
|
|
67
|
+
*/
|
|
68
|
+
makefile?: MakefileFacts;
|
|
33
69
|
/**
|
|
34
70
|
* Config files for the ai_config detectors, discovered here so they share
|
|
35
71
|
* the scan's include/exclude and size/binary policy instead of re-walking
|
|
36
72
|
* the repo with a policy of their own.
|
|
37
73
|
*/
|
|
38
74
|
aiConfig: AiConfigFiles;
|
|
75
|
+
/** The scan's `exclude` patterns, for detectors that walk the repo themselves. */
|
|
76
|
+
exclude?: string[];
|
|
39
77
|
metrics: ScanMetrics;
|
|
40
78
|
contextBudget?: number;
|
|
41
79
|
fileContextBudget?: number;
|
|
@@ -53,6 +91,14 @@ export type RepoContext = {
|
|
|
53
91
|
* `aiConfig`, independent of this array.
|
|
54
92
|
*/
|
|
55
93
|
onDemandFiles: InstructionFile[];
|
|
94
|
+
/**
|
|
95
|
+
* Symlinked names of files already in `files`/`onDemandFiles` (e.g. `CLAUDE.md`
|
|
96
|
+
* -> `AGENTS.md`), each with `aliasOf` naming the real file. Kept out of
|
|
97
|
+
* `files` so no detector scans the same content twice or reports a file as a
|
|
98
|
+
* duplicate of its own symlink; listed in the report inventory. Optional so
|
|
99
|
+
* hand-built contexts keep type-checking.
|
|
100
|
+
*/
|
|
101
|
+
aliasFiles?: InstructionFile[];
|
|
56
102
|
/**
|
|
57
103
|
* Validated rules loaded from `.promptci/custom-rules.json` (empty when the
|
|
58
104
|
* file is absent). Interpreted by the `custom-rules` detector.
|
|
@@ -60,5 +106,12 @@ export type RepoContext = {
|
|
|
60
106
|
customRules: CustomRule[];
|
|
61
107
|
};
|
|
62
108
|
export declare function parsePackageJsonFacts(raw: string | undefined, lockfiles: string[]): PackageJsonFacts;
|
|
109
|
+
/**
|
|
110
|
+
* True when a repo-relative POSIX path is covered by an `exclude` pattern —
|
|
111
|
+
* matched against the file itself AND each ancestor directory (bare and with a
|
|
112
|
+
* trailing slash), the way discovery's glob ignore treats a directory pattern:
|
|
113
|
+
* `exclude: [".github"]` or `[".github/workflows/"]` silences every file under it.
|
|
114
|
+
*/
|
|
115
|
+
export declare function isExcludedPath(posix: string, exclude: string[]): boolean;
|
|
63
116
|
export declare function buildRepoContext(input: ScanInput): Promise<RepoContext>;
|
|
64
117
|
//# sourceMappingURL=repo-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-context.d.ts","sourceRoot":"","sources":["../src/repo-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-context.d.ts","sourceRoot":"","sources":["../src/repo-context.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-context.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import { discoverAiConfigFiles,
|
|
3
|
+
import { discoverAiConfigFiles, listFiles, resolveReadableWithinRoot } from './ai-config.js';
|
|
4
4
|
import { detectProjectType, detectProjectTypeFromContent } from './project-type.js';
|
|
5
|
-
import
|
|
5
|
+
import micromatch from 'micromatch';
|
|
6
|
+
import { MAX_FILE_SIZE, isBinary, parseSections, scanFilesWithAliases } from './scanner.js';
|
|
7
|
+
import { discoverWorkspaceManifests } from './workspace-manifests.js';
|
|
8
|
+
import { readMakefile } from './makefile.js';
|
|
6
9
|
import { isOnDemandFileType } from './types.js';
|
|
10
|
+
import { realPathWithinRoot } from './path-containment.js';
|
|
7
11
|
import { budgetForTargetModel } from './model-budgets.js';
|
|
8
12
|
import { loadCustomRules } from './custom-rules.js';
|
|
9
13
|
const LOCKFILES = [
|
|
@@ -24,9 +28,11 @@ function emptyPackageJsonFacts() {
|
|
|
24
28
|
};
|
|
25
29
|
}
|
|
26
30
|
// Throwing wrapper over the shared null-returning guard in ai-config.ts — one
|
|
27
|
-
// implementation of the path-traversal check, two failure styles.
|
|
31
|
+
// implementation of the path-traversal check, two failure styles. Every caller
|
|
32
|
+
// reads what it resolves, so it is the symlink-aware variant: a manifest or
|
|
33
|
+
// skill committed as a link to a file outside the repo is treated as absent.
|
|
28
34
|
function resolveWithinRoot(repoRoot, relativePath) {
|
|
29
|
-
const resolved =
|
|
35
|
+
const resolved = resolveReadableWithinRoot(repoRoot, relativePath);
|
|
30
36
|
if (resolved === null) {
|
|
31
37
|
throw new Error(`Path escapes repo root: ${relativePath}`);
|
|
32
38
|
}
|
|
@@ -156,28 +162,123 @@ function extractWorkflowCommands(filePath, content) {
|
|
|
156
162
|
}
|
|
157
163
|
return commands;
|
|
158
164
|
}
|
|
159
|
-
async function readWorkflowFacts(repoRoot) {
|
|
160
|
-
|
|
165
|
+
async function readWorkflowFacts(repoRoot, exclude = []) {
|
|
166
|
+
let workflowDir;
|
|
161
167
|
let entries;
|
|
162
168
|
try {
|
|
169
|
+
workflowDir = resolveWithinRoot(repoRoot, path.join('.github', 'workflows'));
|
|
163
170
|
entries = await fs.readdir(workflowDir, { withFileTypes: true });
|
|
164
171
|
}
|
|
165
172
|
catch {
|
|
166
|
-
return { files: [], commands: [] };
|
|
173
|
+
return { files: [], commands: [], sources: await readCompositeActionSources(repoRoot, exclude) };
|
|
167
174
|
}
|
|
168
175
|
const files = entries
|
|
169
176
|
.filter((entry) => entry.isFile() && /\.(ya?ml)$/i.test(entry.name))
|
|
170
177
|
.map((entry) => path.join(workflowDir, entry.name))
|
|
171
178
|
.sort();
|
|
172
179
|
const commands = [];
|
|
180
|
+
const sources = [];
|
|
173
181
|
for (const file of files) {
|
|
174
182
|
const relative = path.relative(repoRoot, file);
|
|
175
|
-
|
|
183
|
+
if (!realPathWithinRoot(repoRoot, file))
|
|
184
|
+
continue; // symlink leaving the repo
|
|
185
|
+
let content;
|
|
186
|
+
try {
|
|
187
|
+
content = await fs.readFile(file, 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
176
192
|
commands.push(...extractWorkflowCommands(relative, content));
|
|
193
|
+
// Only the YAML-auditing detectors read `sources`, so only they honor
|
|
194
|
+
// `exclude` — ci-alignment's `files`/`commands` keep their existing scope.
|
|
195
|
+
const posix = relative.replace(/\\/g, '/');
|
|
196
|
+
if (content.length <= MAX_FILE_SIZE && !isExcludedPath(posix, exclude)) {
|
|
197
|
+
sources.push({ filePath: posix, content });
|
|
198
|
+
}
|
|
177
199
|
}
|
|
200
|
+
sources.push(...(await readCompositeActionSources(repoRoot, exclude)));
|
|
178
201
|
return {
|
|
179
202
|
files: files.map((file) => path.relative(repoRoot, file)),
|
|
180
203
|
commands,
|
|
204
|
+
sources,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/** Composite actions: a root `action.yml` and any under `.github/actions/`. */
|
|
208
|
+
const COMPOSITE_ACTION_GLOBS = [
|
|
209
|
+
'action.yml',
|
|
210
|
+
'action.yaml',
|
|
211
|
+
'.github/actions/**/action.yml',
|
|
212
|
+
'.github/actions/**/action.yaml',
|
|
213
|
+
];
|
|
214
|
+
async function readCompositeActionSources(repoRoot, exclude) {
|
|
215
|
+
const sources = [];
|
|
216
|
+
for (const rel of listFiles(repoRoot, COMPOSITE_ACTION_GLOBS)) {
|
|
217
|
+
if (isExcludedPath(rel, exclude))
|
|
218
|
+
continue;
|
|
219
|
+
const abs = resolveReadableWithinRoot(repoRoot, rel);
|
|
220
|
+
if (!abs)
|
|
221
|
+
continue;
|
|
222
|
+
try {
|
|
223
|
+
const stat = await fs.stat(abs);
|
|
224
|
+
if (!stat.isFile() || stat.size > MAX_FILE_SIZE)
|
|
225
|
+
continue;
|
|
226
|
+
sources.push({ filePath: rel, content: await fs.readFile(abs, 'utf-8') });
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// unreadable — skip
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return sources;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* True when a repo-relative POSIX path is covered by an `exclude` pattern —
|
|
236
|
+
* matched against the file itself AND each ancestor directory (bare and with a
|
|
237
|
+
* trailing slash), the way discovery's glob ignore treats a directory pattern:
|
|
238
|
+
* `exclude: [".github"]` or `[".github/workflows/"]` silences every file under it.
|
|
239
|
+
*/
|
|
240
|
+
export function isExcludedPath(posix, exclude) {
|
|
241
|
+
if (exclude.length === 0)
|
|
242
|
+
return false;
|
|
243
|
+
const candidates = [posix];
|
|
244
|
+
const parts = posix.split('/');
|
|
245
|
+
for (let i = 1; i < parts.length; i++) {
|
|
246
|
+
const dir = parts.slice(0, i).join('/');
|
|
247
|
+
candidates.push(dir, `${dir}/`);
|
|
248
|
+
}
|
|
249
|
+
return candidates.some((c) => micromatch.isMatch(c, exclude, { dot: true }));
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Read a discovered SKILL.md into the same InstructionFile shape scanFiles
|
|
253
|
+
* produces, under the same size/binary guards (the supply-chain detector reads
|
|
254
|
+
* and reports oversized or binary skills on its own).
|
|
255
|
+
*/
|
|
256
|
+
async function readSkillFile(repoRoot, relativePath, absPath) {
|
|
257
|
+
let buffer;
|
|
258
|
+
try {
|
|
259
|
+
const stat = await fs.stat(resolveWithinRoot(repoRoot, relativePath));
|
|
260
|
+
if (!stat.isFile() || stat.size > MAX_FILE_SIZE)
|
|
261
|
+
return undefined;
|
|
262
|
+
buffer = await fs.readFile(resolveWithinRoot(repoRoot, relativePath));
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
if (isBinary(buffer))
|
|
268
|
+
return undefined;
|
|
269
|
+
const content = buffer.toString('utf-8');
|
|
270
|
+
const lines = content.split('\n');
|
|
271
|
+
if (content.endsWith('\n'))
|
|
272
|
+
lines.pop();
|
|
273
|
+
return {
|
|
274
|
+
path: absPath,
|
|
275
|
+
relativePath,
|
|
276
|
+
fileType: 'skill',
|
|
277
|
+
content,
|
|
278
|
+
sections: parseSections(content, absPath, relativePath),
|
|
279
|
+
lineCount: lines.length,
|
|
280
|
+
charCount: content.length,
|
|
281
|
+
estimatedTokens: Math.round(content.length / 4),
|
|
181
282
|
};
|
|
182
283
|
}
|
|
183
284
|
function buildMetrics(files, onDemandFiles) {
|
|
@@ -197,7 +298,7 @@ function buildMetrics(files, onDemandFiles) {
|
|
|
197
298
|
}
|
|
198
299
|
export async function buildRepoContext(input) {
|
|
199
300
|
const repoRoot = path.resolve(input.repoPath);
|
|
200
|
-
const scanned = await
|
|
301
|
+
const { files: scanned, aliases: aliasFiles } = await scanFilesWithAliases({ ...input, repoPath: repoRoot });
|
|
201
302
|
// Split load-on-demand skill/agent bodies out of the always-loaded set the
|
|
202
303
|
// prose/bloat detectors consume via `context.files`. They stay available on
|
|
203
304
|
// `onDemandFiles` for reporting and suppression parsing.
|
|
@@ -206,6 +307,21 @@ export async function buildRepoContext(input) {
|
|
|
206
307
|
for (const file of scanned) {
|
|
207
308
|
(isOnDemandFileType(file.fileType) ? onDemandFiles : files).push(file);
|
|
208
309
|
}
|
|
310
|
+
// Skills discovered outside the scanner's patterns (`.agents/skills/`, plugin
|
|
311
|
+
// `skills/<name>/`) still belong in the report inventory. Load-on-demand, so
|
|
312
|
+
// never in `files`. (Inline annotations inside a skill directory do NOT
|
|
313
|
+
// suppress skill-supply-chain findings — see scan.ts.)
|
|
314
|
+
const aiConfig = discoverAiConfigFiles(repoRoot, input);
|
|
315
|
+
const scannedPaths = new Set(scanned.map((file) => file.path));
|
|
316
|
+
for (const rel of aiConfig.allSkills ?? []) {
|
|
317
|
+
const abs = path.resolve(repoRoot, rel);
|
|
318
|
+
if (scannedPaths.has(abs))
|
|
319
|
+
continue;
|
|
320
|
+
const skillFile = await readSkillFile(repoRoot, rel, abs);
|
|
321
|
+
if (skillFile)
|
|
322
|
+
onDemandFiles.push(skillFile);
|
|
323
|
+
}
|
|
324
|
+
onDemandFiles.sort((a, b) => a.path.localeCompare(b.path));
|
|
209
325
|
let projectType = input.projectType && input.projectType !== 'auto'
|
|
210
326
|
? input.projectType
|
|
211
327
|
: await detectProjectType(repoRoot);
|
|
@@ -217,10 +333,12 @@ export async function buildRepoContext(input) {
|
|
|
217
333
|
readRootFile(repoRoot, 'pyproject.toml'),
|
|
218
334
|
readRootFile(repoRoot, 'requirements.txt'),
|
|
219
335
|
existingRootFiles(repoRoot, LOCKFILES),
|
|
220
|
-
readWorkflowFacts(repoRoot),
|
|
336
|
+
readWorkflowFacts(repoRoot, input.exclude),
|
|
221
337
|
// Throws a clear CustomRulesError on malformed config, surfaced at scan time.
|
|
222
338
|
loadCustomRules(repoRoot),
|
|
223
339
|
]);
|
|
340
|
+
const workspaceDiscovery = await discoverWorkspaceManifests(repoRoot, packageJson, (posix) => isExcludedPath(posix, input.exclude ?? []));
|
|
341
|
+
const makefile = readMakefile(repoRoot, '.');
|
|
224
342
|
const manifests = {};
|
|
225
343
|
if (packageJson)
|
|
226
344
|
manifests.packageJson = packageJson;
|
|
@@ -238,7 +356,11 @@ export async function buildRepoContext(input) {
|
|
|
238
356
|
manifests,
|
|
239
357
|
packageJson: parsePackageJsonFacts(packageJson, lockfiles),
|
|
240
358
|
workflows,
|
|
241
|
-
|
|
359
|
+
workspaces: workspaceDiscovery.manifests,
|
|
360
|
+
workspacesTruncated: workspaceDiscovery.truncated,
|
|
361
|
+
...(makefile ? { makefile } : {}),
|
|
362
|
+
aiConfig,
|
|
363
|
+
...(input.exclude && input.exclude.length > 0 ? { exclude: input.exclude } : {}),
|
|
242
364
|
metrics: buildMetrics(files, onDemandFiles),
|
|
243
365
|
// A targetModel preset scales the context-bloat thresholds to that model's
|
|
244
366
|
// window, but an explicit budget (flag or config) always wins over it.
|
|
@@ -246,6 +368,7 @@ export async function buildRepoContext(input) {
|
|
|
246
368
|
fileContextBudget: input.fileContextBudget ?? modelPreset?.fileContextBudget,
|
|
247
369
|
vagueGuidanceSeverity: input.vagueGuidanceSeverity,
|
|
248
370
|
onDemandFiles,
|
|
371
|
+
...(aliasFiles.length > 0 ? { aliasFiles } : {}),
|
|
249
372
|
customRules,
|
|
250
373
|
};
|
|
251
374
|
}
|
package/dist/repo-context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-context.js","sourceRoot":"","sources":["../src/repo-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repo-context.js","sourceRoot":"","sources":["../src/repo-context.ts"],"names":[],"mappings":"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"}
|
package/dist/report.d.ts
CHANGED
|
@@ -35,6 +35,13 @@ export type HistoryEntry = {
|
|
|
35
35
|
archiveJsonPath: string;
|
|
36
36
|
};
|
|
37
37
|
export declare function scoreLabel(score: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Render `text` as a markdown inline code span that cannot be broken out of: the
|
|
40
|
+
* fence is one backtick longer than the longest backtick run inside, and every
|
|
41
|
+
* invisible/control/format character is shown as `<U+XXXX>` (visibleText).
|
|
42
|
+
* Plain paths render exactly as a single-backtick span.
|
|
43
|
+
*/
|
|
44
|
+
export declare function inlineCode(text: string): string;
|
|
38
45
|
/**
|
|
39
46
|
* Generate a Markdown-formatted scan report.
|
|
40
47
|
*/
|
package/dist/report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgC,UAAU,EAAkB,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgC,UAAU,EAAkB,SAAS,EAAE,MAAM,YAAY,CAAC;AAKtG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAwJF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAuBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AA4DD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA8KjE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,UAAO,GAAG,MAAM,CA8C5E;AAID,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAUhF;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAoE9B;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,CAAC,CAsCnF;AAWD,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC9C,OAAO,EAAE,YAAY,EAAE,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0F3B"}
|
package/dist/report.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
import * as fs from 'node:fs/promises';
|
|
5
5
|
import * as nodePath from 'node:path';
|
|
6
6
|
import { computeFingerprint } from './baseline.js';
|
|
7
|
-
import {
|
|
7
|
+
import { writeTargetWithinRoot } from './path-containment.js';
|
|
8
|
+
import { snippet, visibleText } from './evidence.js';
|
|
8
9
|
const SEVERITY_LABEL = {
|
|
9
10
|
critical: 'CRITICAL',
|
|
10
11
|
high: 'HIGH',
|
|
@@ -150,6 +151,19 @@ function sortedIssues(issues) {
|
|
|
150
151
|
return a.id.localeCompare(b.id);
|
|
151
152
|
});
|
|
152
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Render `text` as a markdown inline code span that cannot be broken out of: the
|
|
156
|
+
* fence is one backtick longer than the longest backtick run inside, and every
|
|
157
|
+
* invisible/control/format character is shown as `<U+XXXX>` (visibleText).
|
|
158
|
+
* Plain paths render exactly as a single-backtick span.
|
|
159
|
+
*/
|
|
160
|
+
export function inlineCode(text) {
|
|
161
|
+
const safe = visibleText(text);
|
|
162
|
+
const longestRun = Math.max(0, ...(safe.match(/`+/g) ?? []).map((run) => run.length));
|
|
163
|
+
const fence = '`'.repeat(longestRun + 1);
|
|
164
|
+
const pad = safe.startsWith('`') || safe.endsWith('`') ? ' ' : '';
|
|
165
|
+
return `${fence}${pad}${safe}${pad}${fence}`;
|
|
166
|
+
}
|
|
153
167
|
function renderIssue(issue, idx, rel) {
|
|
154
168
|
const emoji = SEVERITY_EMOJI[issue.severity];
|
|
155
169
|
const label = SEVERITY_LABEL[issue.severity];
|
|
@@ -165,7 +179,7 @@ function renderIssue(issue, idx, rel) {
|
|
|
165
179
|
// Always show affected files (canonical list)
|
|
166
180
|
if (issue.filePaths.length > 0) {
|
|
167
181
|
for (const fp of issue.filePaths) {
|
|
168
|
-
lines.push(`**File:**
|
|
182
|
+
lines.push(`**File:** ${inlineCode(rel(fp))}`);
|
|
169
183
|
}
|
|
170
184
|
lines.push('');
|
|
171
185
|
}
|
|
@@ -174,15 +188,18 @@ function renderIssue(issue, idx, rel) {
|
|
|
174
188
|
if (withLines.length > 0) {
|
|
175
189
|
for (const loc of withLines) {
|
|
176
190
|
const range = loc.endLine !== undefined ? `L${loc.startLine}–L${loc.endLine}` : `L${loc.startLine}`;
|
|
177
|
-
lines.push(`**Location:**
|
|
191
|
+
lines.push(`**Location:** ${inlineCode(rel(loc.filePath))} ${range}`);
|
|
178
192
|
}
|
|
179
193
|
lines.push('');
|
|
180
194
|
}
|
|
181
195
|
if (issue.evidence.length > 0) {
|
|
182
196
|
lines.push('**Evidence:**');
|
|
197
|
+
// Skill supply-chain evidence quotes third-party content verbatim; render
|
|
198
|
+
// it as inert inline code so its markdown/HTML never renders in the report.
|
|
199
|
+
const untrusted = issue.tags?.[0] === 'skill-supply-chain';
|
|
183
200
|
for (const ev of issue.evidence) {
|
|
184
201
|
// Evidence items are often normalised section blobs — 100 chars is enough.
|
|
185
|
-
lines.push(`- ${snippet(ev, 100)}`);
|
|
202
|
+
lines.push(`- ${untrusted ? inlineCode(snippet(ev, 160)) : snippet(ev, 100)}`);
|
|
186
203
|
}
|
|
187
204
|
lines.push('');
|
|
188
205
|
}
|
|
@@ -209,7 +226,8 @@ export function generateMarkdownReport(report) {
|
|
|
209
226
|
lines.push(`**Generated:** ${generatedAt}`);
|
|
210
227
|
lines.push(`**Repo:** \`${repoPath}\``);
|
|
211
228
|
lines.push(`**Project type:** ${projectType}`);
|
|
212
|
-
|
|
229
|
+
// Symlink aliases are listed below but are not separate files: count the real ones.
|
|
230
|
+
lines.push(`**Files scanned:** ${filesScanned.filter((f) => f.aliasOf === undefined).length}`);
|
|
213
231
|
if (report.metrics) {
|
|
214
232
|
lines.push(`**Estimated instruction tokens:** ${report.metrics.estimatedInstructionTokens} (always-loaded)`);
|
|
215
233
|
if (report.metrics.estimatedOnDemandTokens) {
|
|
@@ -333,7 +351,9 @@ export function generateMarkdownReport(report) {
|
|
|
333
351
|
lines.push('');
|
|
334
352
|
const shown = filesScanned.slice(0, FILES_SCANNED_CAP);
|
|
335
353
|
for (const f of shown) {
|
|
336
|
-
lines.push(
|
|
354
|
+
lines.push(f.aliasOf !== undefined
|
|
355
|
+
? `- \`${rel(f.path)}\` (symlink to \`${f.aliasOf}\`)`
|
|
356
|
+
: `- \`${rel(f.path)}\` (${f.fileType}, ${f.lineCount} lines, ~${f.estimatedTokens} tokens)`);
|
|
337
357
|
}
|
|
338
358
|
const overflow = filesScanned.length - shown.length;
|
|
339
359
|
if (overflow > 0) {
|
|
@@ -383,11 +403,13 @@ export function generateJsonReport(report, pretty = true) {
|
|
|
383
403
|
})),
|
|
384
404
|
})),
|
|
385
405
|
filesScanned: report.filesScanned.map((f) => ({
|
|
386
|
-
|
|
406
|
+
// Forward slashes, like `aliasOf` (a repo-relative POSIX path), on every OS.
|
|
407
|
+
path: rel(f.path).replace(/\\/g, '/'),
|
|
387
408
|
fileType: f.fileType,
|
|
388
409
|
lineCount: f.lineCount,
|
|
389
410
|
charCount: f.charCount,
|
|
390
411
|
estimatedTokens: f.estimatedTokens,
|
|
412
|
+
...(f.aliasOf !== undefined ? { aliasOf: f.aliasOf } : {}),
|
|
391
413
|
})),
|
|
392
414
|
...(report.suppressedIssues && report.suppressedIssues.length > 0
|
|
393
415
|
? {
|
|
@@ -516,6 +538,13 @@ export async function writeReport(report, options = {}) {
|
|
|
516
538
|
const outputDir = nodePath.join(report.repoPath, '.promptci');
|
|
517
539
|
const resolvedMd = options.mdPath ?? nodePath.join(outputDir, 'latest.md');
|
|
518
540
|
const resolvedJson = options.jsonPath ?? nodePath.join(outputDir, 'report.json');
|
|
541
|
+
// A `.promptci` (or `latest.md`) committed as a link that leaves the repo must not
|
|
542
|
+
// redirect these writes: mirror of the read policy. An explicit path outside the repo is allowed.
|
|
543
|
+
for (const target of [outputDir, resolvedMd, resolvedJson, nodePath.join(outputDir, 'history')]) {
|
|
544
|
+
if (!writeTargetWithinRoot(report.repoPath, target)) {
|
|
545
|
+
throw new Error(`Refusing to write the report: ${target} resolves outside the repository through a symlink.`);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
519
548
|
await fs.mkdir(nodePath.dirname(resolvedMd), { recursive: true });
|
|
520
549
|
await fs.mkdir(nodePath.dirname(resolvedJson), { recursive: true });
|
|
521
550
|
// Load previous report and history index to compute trend
|