@oculum/scanner 1.0.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/formatters/cli-terminal.d.ts +27 -0
- package/dist/formatters/cli-terminal.d.ts.map +1 -0
- package/dist/formatters/cli-terminal.js +412 -0
- package/dist/formatters/cli-terminal.js.map +1 -0
- package/dist/formatters/github-comment.d.ts +41 -0
- package/dist/formatters/github-comment.d.ts.map +1 -0
- package/dist/formatters/github-comment.js +306 -0
- package/dist/formatters/github-comment.js.map +1 -0
- package/dist/formatters/grouping.d.ts +52 -0
- package/dist/formatters/grouping.d.ts.map +1 -0
- package/dist/formatters/grouping.js +152 -0
- package/dist/formatters/grouping.js.map +1 -0
- package/dist/formatters/index.d.ts +9 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +35 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/vscode-diagnostic.d.ts +103 -0
- package/dist/formatters/vscode-diagnostic.d.ts.map +1 -0
- package/dist/formatters/vscode-diagnostic.js +151 -0
- package/dist/formatters/vscode-diagnostic.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +648 -0
- package/dist/index.js.map +1 -0
- package/dist/layer1/comments.d.ts +8 -0
- package/dist/layer1/comments.d.ts.map +1 -0
- package/dist/layer1/comments.js +203 -0
- package/dist/layer1/comments.js.map +1 -0
- package/dist/layer1/config-audit.d.ts +8 -0
- package/dist/layer1/config-audit.d.ts.map +1 -0
- package/dist/layer1/config-audit.js +252 -0
- package/dist/layer1/config-audit.js.map +1 -0
- package/dist/layer1/entropy.d.ts +8 -0
- package/dist/layer1/entropy.d.ts.map +1 -0
- package/dist/layer1/entropy.js +500 -0
- package/dist/layer1/entropy.js.map +1 -0
- package/dist/layer1/file-flags.d.ts +7 -0
- package/dist/layer1/file-flags.d.ts.map +1 -0
- package/dist/layer1/file-flags.js +112 -0
- package/dist/layer1/file-flags.js.map +1 -0
- package/dist/layer1/index.d.ts +36 -0
- package/dist/layer1/index.d.ts.map +1 -0
- package/dist/layer1/index.js +132 -0
- package/dist/layer1/index.js.map +1 -0
- package/dist/layer1/patterns.d.ts +8 -0
- package/dist/layer1/patterns.d.ts.map +1 -0
- package/dist/layer1/patterns.js +482 -0
- package/dist/layer1/patterns.js.map +1 -0
- package/dist/layer1/urls.d.ts +8 -0
- package/dist/layer1/urls.d.ts.map +1 -0
- package/dist/layer1/urls.js +296 -0
- package/dist/layer1/urls.js.map +1 -0
- package/dist/layer1/weak-crypto.d.ts +7 -0
- package/dist/layer1/weak-crypto.d.ts.map +1 -0
- package/dist/layer1/weak-crypto.js +291 -0
- package/dist/layer1/weak-crypto.js.map +1 -0
- package/dist/layer2/ai-agent-tools.d.ts +19 -0
- package/dist/layer2/ai-agent-tools.d.ts.map +1 -0
- package/dist/layer2/ai-agent-tools.js +528 -0
- package/dist/layer2/ai-agent-tools.js.map +1 -0
- package/dist/layer2/ai-endpoint-protection.d.ts +36 -0
- package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -0
- package/dist/layer2/ai-endpoint-protection.js +332 -0
- package/dist/layer2/ai-endpoint-protection.js.map +1 -0
- package/dist/layer2/ai-execution-sinks.d.ts +18 -0
- package/dist/layer2/ai-execution-sinks.d.ts.map +1 -0
- package/dist/layer2/ai-execution-sinks.js +496 -0
- package/dist/layer2/ai-execution-sinks.js.map +1 -0
- package/dist/layer2/ai-fingerprinting.d.ts +7 -0
- package/dist/layer2/ai-fingerprinting.d.ts.map +1 -0
- package/dist/layer2/ai-fingerprinting.js +654 -0
- package/dist/layer2/ai-fingerprinting.js.map +1 -0
- package/dist/layer2/ai-prompt-hygiene.d.ts +19 -0
- package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -0
- package/dist/layer2/ai-prompt-hygiene.js +356 -0
- package/dist/layer2/ai-prompt-hygiene.js.map +1 -0
- package/dist/layer2/ai-rag-safety.d.ts +21 -0
- package/dist/layer2/ai-rag-safety.d.ts.map +1 -0
- package/dist/layer2/ai-rag-safety.js +459 -0
- package/dist/layer2/ai-rag-safety.js.map +1 -0
- package/dist/layer2/ai-schema-validation.d.ts +25 -0
- package/dist/layer2/ai-schema-validation.d.ts.map +1 -0
- package/dist/layer2/ai-schema-validation.js +375 -0
- package/dist/layer2/ai-schema-validation.js.map +1 -0
- package/dist/layer2/auth-antipatterns.d.ts +20 -0
- package/dist/layer2/auth-antipatterns.d.ts.map +1 -0
- package/dist/layer2/auth-antipatterns.js +333 -0
- package/dist/layer2/auth-antipatterns.js.map +1 -0
- package/dist/layer2/byok-patterns.d.ts +12 -0
- package/dist/layer2/byok-patterns.d.ts.map +1 -0
- package/dist/layer2/byok-patterns.js +299 -0
- package/dist/layer2/byok-patterns.js.map +1 -0
- package/dist/layer2/dangerous-functions.d.ts +7 -0
- package/dist/layer2/dangerous-functions.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions.js +1375 -0
- package/dist/layer2/dangerous-functions.js.map +1 -0
- package/dist/layer2/data-exposure.d.ts +16 -0
- package/dist/layer2/data-exposure.d.ts.map +1 -0
- package/dist/layer2/data-exposure.js +279 -0
- package/dist/layer2/data-exposure.js.map +1 -0
- package/dist/layer2/framework-checks.d.ts +7 -0
- package/dist/layer2/framework-checks.d.ts.map +1 -0
- package/dist/layer2/framework-checks.js +388 -0
- package/dist/layer2/framework-checks.js.map +1 -0
- package/dist/layer2/index.d.ts +58 -0
- package/dist/layer2/index.d.ts.map +1 -0
- package/dist/layer2/index.js +380 -0
- package/dist/layer2/index.js.map +1 -0
- package/dist/layer2/logic-gates.d.ts +7 -0
- package/dist/layer2/logic-gates.d.ts.map +1 -0
- package/dist/layer2/logic-gates.js +182 -0
- package/dist/layer2/logic-gates.js.map +1 -0
- package/dist/layer2/risky-imports.d.ts +7 -0
- package/dist/layer2/risky-imports.d.ts.map +1 -0
- package/dist/layer2/risky-imports.js +161 -0
- package/dist/layer2/risky-imports.js.map +1 -0
- package/dist/layer2/variables.d.ts +8 -0
- package/dist/layer2/variables.d.ts.map +1 -0
- package/dist/layer2/variables.js +152 -0
- package/dist/layer2/variables.js.map +1 -0
- package/dist/layer3/anthropic.d.ts +83 -0
- package/dist/layer3/anthropic.d.ts.map +1 -0
- package/dist/layer3/anthropic.js +1745 -0
- package/dist/layer3/anthropic.js.map +1 -0
- package/dist/layer3/index.d.ts +24 -0
- package/dist/layer3/index.d.ts.map +1 -0
- package/dist/layer3/index.js +119 -0
- package/dist/layer3/index.js.map +1 -0
- package/dist/layer3/openai.d.ts +25 -0
- package/dist/layer3/openai.d.ts.map +1 -0
- package/dist/layer3/openai.js +238 -0
- package/dist/layer3/openai.js.map +1 -0
- package/dist/layer3/package-check.d.ts +63 -0
- package/dist/layer3/package-check.d.ts.map +1 -0
- package/dist/layer3/package-check.js +508 -0
- package/dist/layer3/package-check.js.map +1 -0
- package/dist/modes/incremental.d.ts +66 -0
- package/dist/modes/incremental.d.ts.map +1 -0
- package/dist/modes/incremental.js +200 -0
- package/dist/modes/incremental.js.map +1 -0
- package/dist/tiers.d.ts +125 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +234 -0
- package/dist/tiers.js.map +1 -0
- package/dist/types.d.ts +175 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +50 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/auth-helper-detector.d.ts +56 -0
- package/dist/utils/auth-helper-detector.d.ts.map +1 -0
- package/dist/utils/auth-helper-detector.js +360 -0
- package/dist/utils/auth-helper-detector.js.map +1 -0
- package/dist/utils/context-helpers.d.ts +96 -0
- package/dist/utils/context-helpers.d.ts.map +1 -0
- package/dist/utils/context-helpers.js +493 -0
- package/dist/utils/context-helpers.js.map +1 -0
- package/dist/utils/diff-detector.d.ts +53 -0
- package/dist/utils/diff-detector.d.ts.map +1 -0
- package/dist/utils/diff-detector.js +104 -0
- package/dist/utils/diff-detector.js.map +1 -0
- package/dist/utils/diff-parser.d.ts +80 -0
- package/dist/utils/diff-parser.d.ts.map +1 -0
- package/dist/utils/diff-parser.js +202 -0
- package/dist/utils/diff-parser.js.map +1 -0
- package/dist/utils/imported-auth-detector.d.ts +37 -0
- package/dist/utils/imported-auth-detector.d.ts.map +1 -0
- package/dist/utils/imported-auth-detector.js +251 -0
- package/dist/utils/imported-auth-detector.js.map +1 -0
- package/dist/utils/middleware-detector.d.ts +55 -0
- package/dist/utils/middleware-detector.d.ts.map +1 -0
- package/dist/utils/middleware-detector.js +260 -0
- package/dist/utils/middleware-detector.js.map +1 -0
- package/dist/utils/oauth-flow-detector.d.ts +41 -0
- package/dist/utils/oauth-flow-detector.d.ts.map +1 -0
- package/dist/utils/oauth-flow-detector.js +202 -0
- package/dist/utils/oauth-flow-detector.js.map +1 -0
- package/dist/utils/path-exclusions.d.ts +55 -0
- package/dist/utils/path-exclusions.d.ts.map +1 -0
- package/dist/utils/path-exclusions.js +222 -0
- package/dist/utils/path-exclusions.js.map +1 -0
- package/dist/utils/project-context-builder.d.ts +119 -0
- package/dist/utils/project-context-builder.d.ts.map +1 -0
- package/dist/utils/project-context-builder.js +534 -0
- package/dist/utils/project-context-builder.js.map +1 -0
- package/dist/utils/registry-clients.d.ts +93 -0
- package/dist/utils/registry-clients.d.ts.map +1 -0
- package/dist/utils/registry-clients.js +273 -0
- package/dist/utils/registry-clients.js.map +1 -0
- package/dist/utils/trpc-analyzer.d.ts +78 -0
- package/dist/utils/trpc-analyzer.d.ts.map +1 -0
- package/dist/utils/trpc-analyzer.js +297 -0
- package/dist/utils/trpc-analyzer.js.map +1 -0
- package/package.json +45 -0
- package/src/__tests__/benchmark/fixtures/false-positives.ts +227 -0
- package/src/__tests__/benchmark/fixtures/index.ts +68 -0
- package/src/__tests__/benchmark/fixtures/layer1/config-audit.ts +364 -0
- package/src/__tests__/benchmark/fixtures/layer1/hardcoded-secrets.ts +173 -0
- package/src/__tests__/benchmark/fixtures/layer1/high-entropy.ts +234 -0
- package/src/__tests__/benchmark/fixtures/layer1/index.ts +31 -0
- package/src/__tests__/benchmark/fixtures/layer1/sensitive-urls.ts +90 -0
- package/src/__tests__/benchmark/fixtures/layer1/weak-crypto.ts +197 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-agent-tools.ts +170 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-endpoint-protection.ts +418 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +189 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-fingerprinting.ts +316 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +178 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +184 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-schema-validation.ts +434 -0
- package/src/__tests__/benchmark/fixtures/layer2/auth-antipatterns.ts +159 -0
- package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +112 -0
- package/src/__tests__/benchmark/fixtures/layer2/dangerous-functions.ts +246 -0
- package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +168 -0
- package/src/__tests__/benchmark/fixtures/layer2/framework-checks.ts +346 -0
- package/src/__tests__/benchmark/fixtures/layer2/index.ts +67 -0
- package/src/__tests__/benchmark/fixtures/layer2/injection-vulnerabilities.ts +239 -0
- package/src/__tests__/benchmark/fixtures/layer2/logic-gates.ts +246 -0
- package/src/__tests__/benchmark/fixtures/layer2/risky-imports.ts +231 -0
- package/src/__tests__/benchmark/fixtures/layer2/variables.ts +167 -0
- package/src/__tests__/benchmark/index.ts +29 -0
- package/src/__tests__/benchmark/run-benchmark.ts +144 -0
- package/src/__tests__/benchmark/run-depth-validation.ts +206 -0
- package/src/__tests__/benchmark/run-real-world-test.ts +243 -0
- package/src/__tests__/benchmark/security-benchmark-script.ts +1737 -0
- package/src/__tests__/benchmark/tier-integration-script.ts +177 -0
- package/src/__tests__/benchmark/types.ts +144 -0
- package/src/__tests__/benchmark/utils/test-runner.ts +475 -0
- package/src/__tests__/regression/known-false-positives.test.ts +467 -0
- package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +178 -0
- package/src/__tests__/snapshots/scan-depth.test.ts +258 -0
- package/src/__tests__/validation/analyze-results.ts +542 -0
- package/src/__tests__/validation/extract-for-triage.ts +146 -0
- package/src/__tests__/validation/fp-deep-analysis.ts +327 -0
- package/src/__tests__/validation/run-validation.ts +364 -0
- package/src/__tests__/validation/triage-template.md +132 -0
- package/src/formatters/cli-terminal.ts +446 -0
- package/src/formatters/github-comment.ts +382 -0
- package/src/formatters/grouping.ts +190 -0
- package/src/formatters/index.ts +47 -0
- package/src/formatters/vscode-diagnostic.ts +243 -0
- package/src/index.ts +823 -0
- package/src/layer1/comments.ts +218 -0
- package/src/layer1/config-audit.ts +289 -0
- package/src/layer1/entropy.ts +583 -0
- package/src/layer1/file-flags.ts +127 -0
- package/src/layer1/index.ts +181 -0
- package/src/layer1/patterns.ts +516 -0
- package/src/layer1/urls.ts +334 -0
- package/src/layer1/weak-crypto.ts +328 -0
- package/src/layer2/ai-agent-tools.ts +601 -0
- package/src/layer2/ai-endpoint-protection.ts +387 -0
- package/src/layer2/ai-execution-sinks.ts +580 -0
- package/src/layer2/ai-fingerprinting.ts +758 -0
- package/src/layer2/ai-prompt-hygiene.ts +411 -0
- package/src/layer2/ai-rag-safety.ts +511 -0
- package/src/layer2/ai-schema-validation.ts +421 -0
- package/src/layer2/auth-antipatterns.ts +394 -0
- package/src/layer2/byok-patterns.ts +336 -0
- package/src/layer2/dangerous-functions.ts +1563 -0
- package/src/layer2/data-exposure.ts +315 -0
- package/src/layer2/framework-checks.ts +433 -0
- package/src/layer2/index.ts +473 -0
- package/src/layer2/logic-gates.ts +206 -0
- package/src/layer2/risky-imports.ts +186 -0
- package/src/layer2/variables.ts +166 -0
- package/src/layer3/anthropic.ts +2030 -0
- package/src/layer3/index.ts +130 -0
- package/src/layer3/package-check.ts +604 -0
- package/src/modes/incremental.ts +293 -0
- package/src/tiers.ts +318 -0
- package/src/types.ts +284 -0
- package/src/utils/auth-helper-detector.ts +443 -0
- package/src/utils/context-helpers.ts +535 -0
- package/src/utils/diff-detector.ts +135 -0
- package/src/utils/diff-parser.ts +272 -0
- package/src/utils/imported-auth-detector.ts +320 -0
- package/src/utils/middleware-detector.ts +333 -0
- package/src/utils/oauth-flow-detector.ts +246 -0
- package/src/utils/path-exclusions.ts +266 -0
- package/src/utils/project-context-builder.ts +707 -0
- package/src/utils/registry-clients.ts +351 -0
- package/src/utils/trpc-analyzer.ts +382 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VS Code Diagnostic Formatter
|
|
3
|
+
* Formats scan results as LSP diagnostic format for VS Code integration
|
|
4
|
+
*/
|
|
5
|
+
import type { Vulnerability } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* LSP Diagnostic Severity
|
|
8
|
+
* https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnosticSeverity
|
|
9
|
+
*/
|
|
10
|
+
export declare enum DiagnosticSeverity {
|
|
11
|
+
Error = 1,
|
|
12
|
+
Warning = 2,
|
|
13
|
+
Information = 3,
|
|
14
|
+
Hint = 4
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* LSP Position (0-indexed)
|
|
18
|
+
*/
|
|
19
|
+
export interface Position {
|
|
20
|
+
line: number;
|
|
21
|
+
character: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* LSP Range
|
|
25
|
+
*/
|
|
26
|
+
export interface Range {
|
|
27
|
+
start: Position;
|
|
28
|
+
end: Position;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* LSP Diagnostic
|
|
32
|
+
* https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnostic
|
|
33
|
+
*/
|
|
34
|
+
export interface Diagnostic {
|
|
35
|
+
range: Range;
|
|
36
|
+
severity: DiagnosticSeverity;
|
|
37
|
+
code?: string | number;
|
|
38
|
+
source: string;
|
|
39
|
+
message: string;
|
|
40
|
+
relatedInformation?: DiagnosticRelatedInformation[];
|
|
41
|
+
tags?: DiagnosticTag[];
|
|
42
|
+
data?: unknown;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* LSP Diagnostic Related Information
|
|
46
|
+
*/
|
|
47
|
+
export interface DiagnosticRelatedInformation {
|
|
48
|
+
location: {
|
|
49
|
+
uri: string;
|
|
50
|
+
range: Range;
|
|
51
|
+
};
|
|
52
|
+
message: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* LSP Diagnostic Tag
|
|
56
|
+
*/
|
|
57
|
+
export declare enum DiagnosticTag {
|
|
58
|
+
Unnecessary = 1,
|
|
59
|
+
Deprecated = 2
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Format vulnerability as LSP diagnostic
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatDiagnostic(finding: Vulnerability, fileUri?: string): Diagnostic;
|
|
65
|
+
/**
|
|
66
|
+
* Group diagnostics by file URI
|
|
67
|
+
*/
|
|
68
|
+
export interface DiagnosticsByFile {
|
|
69
|
+
uri: string;
|
|
70
|
+
diagnostics: Diagnostic[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Format vulnerabilities as diagnostics grouped by file
|
|
74
|
+
*/
|
|
75
|
+
export declare function formatDiagnosticsByFile(vulnerabilities: Vulnerability[], baseUri?: string): DiagnosticsByFile[];
|
|
76
|
+
/**
|
|
77
|
+
* VS Code Code Action (quick fix) format
|
|
78
|
+
*/
|
|
79
|
+
export interface CodeAction {
|
|
80
|
+
title: string;
|
|
81
|
+
kind: string;
|
|
82
|
+
diagnostics: Diagnostic[];
|
|
83
|
+
edit?: {
|
|
84
|
+
changes: Record<string, TextEdit[]>;
|
|
85
|
+
};
|
|
86
|
+
isPreferred?: boolean;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Text Edit for Code Action
|
|
90
|
+
*/
|
|
91
|
+
export interface TextEdit {
|
|
92
|
+
range: Range;
|
|
93
|
+
newText: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate code action for a finding (if fix is available)
|
|
97
|
+
*/
|
|
98
|
+
export declare function generateCodeAction(finding: Vulnerability, fileUri: string): CodeAction | null;
|
|
99
|
+
/**
|
|
100
|
+
* Format for VS Code Problems panel (simplified text format)
|
|
101
|
+
*/
|
|
102
|
+
export declare function formatForProblemsPanel(vulnerabilities: Vulnerability[]): string;
|
|
103
|
+
//# sourceMappingURL=vscode-diagnostic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-diagnostic.d.ts","sourceRoot":"","sources":["../../src/formatters/vscode-diagnostic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAEpE;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,KAAK,IAAI;IACT,OAAO,IAAI;IACX,WAAW,IAAI;IACf,IAAI,IAAI;CACT;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,QAAQ,CAAA;IACf,GAAG,EAAE,QAAQ,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,4BAA4B,EAAE,CAAA;IACnD,IAAI,CAAC,EAAE,aAAa,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,KAAK,CAAA;KACb,CAAA;IACD,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,WAAW,IAAI;IACf,UAAU,IAAI;CACf;AAkCD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CA8BrF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,aAAa,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,EAAE,CA0BrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;KACpC,CAAA;IACD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,GACd,UAAU,GAAG,IAAI,CAWnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,MAAM,CAsB/E"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VS Code Diagnostic Formatter
|
|
4
|
+
* Formats scan results as LSP diagnostic format for VS Code integration
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DiagnosticTag = exports.DiagnosticSeverity = void 0;
|
|
8
|
+
exports.formatDiagnostic = formatDiagnostic;
|
|
9
|
+
exports.formatDiagnosticsByFile = formatDiagnosticsByFile;
|
|
10
|
+
exports.generateCodeAction = generateCodeAction;
|
|
11
|
+
exports.formatForProblemsPanel = formatForProblemsPanel;
|
|
12
|
+
/**
|
|
13
|
+
* LSP Diagnostic Severity
|
|
14
|
+
* https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnosticSeverity
|
|
15
|
+
*/
|
|
16
|
+
var DiagnosticSeverity;
|
|
17
|
+
(function (DiagnosticSeverity) {
|
|
18
|
+
DiagnosticSeverity[DiagnosticSeverity["Error"] = 1] = "Error";
|
|
19
|
+
DiagnosticSeverity[DiagnosticSeverity["Warning"] = 2] = "Warning";
|
|
20
|
+
DiagnosticSeverity[DiagnosticSeverity["Information"] = 3] = "Information";
|
|
21
|
+
DiagnosticSeverity[DiagnosticSeverity["Hint"] = 4] = "Hint";
|
|
22
|
+
})(DiagnosticSeverity || (exports.DiagnosticSeverity = DiagnosticSeverity = {}));
|
|
23
|
+
/**
|
|
24
|
+
* LSP Diagnostic Tag
|
|
25
|
+
*/
|
|
26
|
+
var DiagnosticTag;
|
|
27
|
+
(function (DiagnosticTag) {
|
|
28
|
+
DiagnosticTag[DiagnosticTag["Unnecessary"] = 1] = "Unnecessary";
|
|
29
|
+
DiagnosticTag[DiagnosticTag["Deprecated"] = 2] = "Deprecated";
|
|
30
|
+
})(DiagnosticTag || (exports.DiagnosticTag = DiagnosticTag = {}));
|
|
31
|
+
/**
|
|
32
|
+
* Map vulnerability severity to LSP diagnostic severity
|
|
33
|
+
*/
|
|
34
|
+
function mapSeverity(severity) {
|
|
35
|
+
switch (severity) {
|
|
36
|
+
case 'critical':
|
|
37
|
+
case 'high':
|
|
38
|
+
return DiagnosticSeverity.Error;
|
|
39
|
+
case 'medium':
|
|
40
|
+
return DiagnosticSeverity.Warning;
|
|
41
|
+
case 'low':
|
|
42
|
+
return DiagnosticSeverity.Information;
|
|
43
|
+
case 'info':
|
|
44
|
+
return DiagnosticSeverity.Hint;
|
|
45
|
+
default:
|
|
46
|
+
return DiagnosticSeverity.Information;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create range for a finding (line-based, full line)
|
|
51
|
+
*/
|
|
52
|
+
function createRange(lineNumber, lineContent) {
|
|
53
|
+
const line = lineNumber - 1; // LSP is 0-indexed
|
|
54
|
+
const endChar = lineContent ? lineContent.length : 1000;
|
|
55
|
+
return {
|
|
56
|
+
start: { line, character: 0 },
|
|
57
|
+
end: { line, character: endChar },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Format vulnerability as LSP diagnostic
|
|
62
|
+
*/
|
|
63
|
+
function formatDiagnostic(finding, fileUri) {
|
|
64
|
+
const severity = mapSeverity(finding.severity);
|
|
65
|
+
const severityLabel = finding.severity.toUpperCase();
|
|
66
|
+
// Build message with fix suggestion
|
|
67
|
+
let message = `[${severityLabel}] ${finding.title}\n\n${finding.description}`;
|
|
68
|
+
if (finding.suggestedFix) {
|
|
69
|
+
message += `\n\n💡 Fix: ${finding.suggestedFix}`;
|
|
70
|
+
}
|
|
71
|
+
const diagnostic = {
|
|
72
|
+
range: createRange(finding.lineNumber, finding.lineContent),
|
|
73
|
+
severity,
|
|
74
|
+
code: finding.category,
|
|
75
|
+
source: 'oculum',
|
|
76
|
+
message,
|
|
77
|
+
};
|
|
78
|
+
// Add validation notes if available
|
|
79
|
+
if (finding.validationNotes) {
|
|
80
|
+
diagnostic.relatedInformation = [{
|
|
81
|
+
location: {
|
|
82
|
+
uri: fileUri || `file://${finding.filePath}`,
|
|
83
|
+
range: createRange(finding.lineNumber),
|
|
84
|
+
},
|
|
85
|
+
message: `AI Validation: ${finding.validationNotes}`,
|
|
86
|
+
}];
|
|
87
|
+
}
|
|
88
|
+
return diagnostic;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format vulnerabilities as diagnostics grouped by file
|
|
92
|
+
*/
|
|
93
|
+
function formatDiagnosticsByFile(vulnerabilities, baseUri) {
|
|
94
|
+
const byFile = new Map();
|
|
95
|
+
for (const finding of vulnerabilities) {
|
|
96
|
+
const uri = baseUri
|
|
97
|
+
? `${baseUri}/${finding.filePath}`
|
|
98
|
+
: `file://${finding.filePath}`;
|
|
99
|
+
if (!byFile.has(uri)) {
|
|
100
|
+
byFile.set(uri, []);
|
|
101
|
+
}
|
|
102
|
+
byFile.get(uri).push(formatDiagnostic(finding, uri));
|
|
103
|
+
}
|
|
104
|
+
// Sort diagnostics within each file by line number
|
|
105
|
+
const result = [];
|
|
106
|
+
for (const [uri, diagnostics] of byFile) {
|
|
107
|
+
diagnostics.sort((a, b) => a.range.start.line - b.range.start.line);
|
|
108
|
+
result.push({ uri, diagnostics });
|
|
109
|
+
}
|
|
110
|
+
// Sort files alphabetically
|
|
111
|
+
result.sort((a, b) => a.uri.localeCompare(b.uri));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate code action for a finding (if fix is available)
|
|
116
|
+
*/
|
|
117
|
+
function generateCodeAction(finding, fileUri) {
|
|
118
|
+
if (!finding.suggestedFix)
|
|
119
|
+
return null;
|
|
120
|
+
// For now, just provide a "learn more" action
|
|
121
|
+
// In the future, we could generate actual code fixes
|
|
122
|
+
return {
|
|
123
|
+
title: `💡 Fix: ${finding.suggestedFix.slice(0, 50)}${finding.suggestedFix.length > 50 ? '...' : ''}`,
|
|
124
|
+
kind: 'quickfix',
|
|
125
|
+
diagnostics: [formatDiagnostic(finding, fileUri)],
|
|
126
|
+
isPreferred: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Format for VS Code Problems panel (simplified text format)
|
|
131
|
+
*/
|
|
132
|
+
function formatForProblemsPanel(vulnerabilities) {
|
|
133
|
+
const byFile = new Map();
|
|
134
|
+
for (const finding of vulnerabilities) {
|
|
135
|
+
if (!byFile.has(finding.filePath)) {
|
|
136
|
+
byFile.set(finding.filePath, []);
|
|
137
|
+
}
|
|
138
|
+
byFile.get(finding.filePath).push(finding);
|
|
139
|
+
}
|
|
140
|
+
let output = '';
|
|
141
|
+
for (const [filePath, findings] of byFile) {
|
|
142
|
+
output += `\n${filePath}\n`;
|
|
143
|
+
for (const finding of findings) {
|
|
144
|
+
const icon = finding.severity === 'critical' || finding.severity === 'high' ? '❌' :
|
|
145
|
+
finding.severity === 'medium' ? '⚠️' : 'ℹ️';
|
|
146
|
+
output += ` ${icon} Line ${finding.lineNumber}: ${finding.title}\n`;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return output.trim();
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=vscode-diagnostic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-diagnostic.js","sourceRoot":"","sources":["../../src/formatters/vscode-diagnostic.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner Orchestrator
|
|
3
|
+
* Coordinates all three scanning layers and produces final results
|
|
4
|
+
*/
|
|
5
|
+
import type { ScanFile, ScanResult, Vulnerability, SeverityCounts, CategoryCounts, ScanMode, ScanModeConfig, ScanDepth } from './types';
|
|
6
|
+
export interface ScanOptions {
|
|
7
|
+
/** Enable AI-powered validation and analysis */
|
|
8
|
+
enableAI?: boolean;
|
|
9
|
+
/** Maximum files to scan */
|
|
10
|
+
maxFiles?: number;
|
|
11
|
+
/** Branch being scanned */
|
|
12
|
+
branch?: string;
|
|
13
|
+
/** Scan mode configuration (full vs incremental) */
|
|
14
|
+
scanMode?: ScanMode | ScanModeConfig;
|
|
15
|
+
/** Scan depth (cheap/validated/deep) - controls AI usage */
|
|
16
|
+
scanDepth?: ScanDepth;
|
|
17
|
+
}
|
|
18
|
+
export interface ScanProgress {
|
|
19
|
+
status: 'fetching' | 'layer1' | 'layer2' | 'layer3' | 'validating' | 'complete' | 'failed';
|
|
20
|
+
message: string;
|
|
21
|
+
filesProcessed: number;
|
|
22
|
+
totalFiles: number;
|
|
23
|
+
vulnerabilitiesFound: number;
|
|
24
|
+
}
|
|
25
|
+
export type ProgressCallback = (progress: ScanProgress) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Run a complete security scan on the provided files
|
|
28
|
+
*
|
|
29
|
+
* Supports two scan modes:
|
|
30
|
+
* - full: Complete scan with AI validation on all files (initial onboarding, deep audits)
|
|
31
|
+
* - incremental: Focused scan on changed files only (CI/CD, fast feedback)
|
|
32
|
+
*/
|
|
33
|
+
export declare function runScan(files: ScanFile[], repoInfo: {
|
|
34
|
+
name: string;
|
|
35
|
+
url: string;
|
|
36
|
+
branch: string;
|
|
37
|
+
}, options?: ScanOptions, onProgress?: ProgressCallback): Promise<ScanResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Helper to compute counts from vulnerabilities (for backfilling legacy scans)
|
|
40
|
+
*/
|
|
41
|
+
export declare function computeIssueMixFromVulnerabilities(vulnerabilities: Vulnerability[]): {
|
|
42
|
+
severityCounts: SeverityCounts;
|
|
43
|
+
categoryCounts: CategoryCounts;
|
|
44
|
+
hasBlockingIssues: boolean;
|
|
45
|
+
};
|
|
46
|
+
export * from './types';
|
|
47
|
+
export { runLayer1Scan } from './layer1';
|
|
48
|
+
export { runLayer2Scan } from './layer2';
|
|
49
|
+
export { runLayer3Scan } from './layer3';
|
|
50
|
+
export { buildProjectContext, type ProjectContext } from './utils/project-context-builder';
|
|
51
|
+
export { validateFindingsWithAI, type ValidationStats, type AIValidationResult } from './layer3/anthropic';
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EAEd,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,SAAS,CAAA;AAkHhB,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAA;IACpC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAA;IAC1F,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;AA8C/D;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,QAAQ,EAAE,EACjB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAkOrB;AA+WD;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG;IACpF,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAMA;AAGD,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAC1F,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
|