@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.
Files changed (281) hide show
  1. package/dist/formatters/cli-terminal.d.ts +27 -0
  2. package/dist/formatters/cli-terminal.d.ts.map +1 -0
  3. package/dist/formatters/cli-terminal.js +412 -0
  4. package/dist/formatters/cli-terminal.js.map +1 -0
  5. package/dist/formatters/github-comment.d.ts +41 -0
  6. package/dist/formatters/github-comment.d.ts.map +1 -0
  7. package/dist/formatters/github-comment.js +306 -0
  8. package/dist/formatters/github-comment.js.map +1 -0
  9. package/dist/formatters/grouping.d.ts +52 -0
  10. package/dist/formatters/grouping.d.ts.map +1 -0
  11. package/dist/formatters/grouping.js +152 -0
  12. package/dist/formatters/grouping.js.map +1 -0
  13. package/dist/formatters/index.d.ts +9 -0
  14. package/dist/formatters/index.d.ts.map +1 -0
  15. package/dist/formatters/index.js +35 -0
  16. package/dist/formatters/index.js.map +1 -0
  17. package/dist/formatters/vscode-diagnostic.d.ts +103 -0
  18. package/dist/formatters/vscode-diagnostic.d.ts.map +1 -0
  19. package/dist/formatters/vscode-diagnostic.js +151 -0
  20. package/dist/formatters/vscode-diagnostic.js.map +1 -0
  21. package/dist/index.d.ts +52 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +648 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/layer1/comments.d.ts +8 -0
  26. package/dist/layer1/comments.d.ts.map +1 -0
  27. package/dist/layer1/comments.js +203 -0
  28. package/dist/layer1/comments.js.map +1 -0
  29. package/dist/layer1/config-audit.d.ts +8 -0
  30. package/dist/layer1/config-audit.d.ts.map +1 -0
  31. package/dist/layer1/config-audit.js +252 -0
  32. package/dist/layer1/config-audit.js.map +1 -0
  33. package/dist/layer1/entropy.d.ts +8 -0
  34. package/dist/layer1/entropy.d.ts.map +1 -0
  35. package/dist/layer1/entropy.js +500 -0
  36. package/dist/layer1/entropy.js.map +1 -0
  37. package/dist/layer1/file-flags.d.ts +7 -0
  38. package/dist/layer1/file-flags.d.ts.map +1 -0
  39. package/dist/layer1/file-flags.js +112 -0
  40. package/dist/layer1/file-flags.js.map +1 -0
  41. package/dist/layer1/index.d.ts +36 -0
  42. package/dist/layer1/index.d.ts.map +1 -0
  43. package/dist/layer1/index.js +132 -0
  44. package/dist/layer1/index.js.map +1 -0
  45. package/dist/layer1/patterns.d.ts +8 -0
  46. package/dist/layer1/patterns.d.ts.map +1 -0
  47. package/dist/layer1/patterns.js +482 -0
  48. package/dist/layer1/patterns.js.map +1 -0
  49. package/dist/layer1/urls.d.ts +8 -0
  50. package/dist/layer1/urls.d.ts.map +1 -0
  51. package/dist/layer1/urls.js +296 -0
  52. package/dist/layer1/urls.js.map +1 -0
  53. package/dist/layer1/weak-crypto.d.ts +7 -0
  54. package/dist/layer1/weak-crypto.d.ts.map +1 -0
  55. package/dist/layer1/weak-crypto.js +291 -0
  56. package/dist/layer1/weak-crypto.js.map +1 -0
  57. package/dist/layer2/ai-agent-tools.d.ts +19 -0
  58. package/dist/layer2/ai-agent-tools.d.ts.map +1 -0
  59. package/dist/layer2/ai-agent-tools.js +528 -0
  60. package/dist/layer2/ai-agent-tools.js.map +1 -0
  61. package/dist/layer2/ai-endpoint-protection.d.ts +36 -0
  62. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -0
  63. package/dist/layer2/ai-endpoint-protection.js +332 -0
  64. package/dist/layer2/ai-endpoint-protection.js.map +1 -0
  65. package/dist/layer2/ai-execution-sinks.d.ts +18 -0
  66. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -0
  67. package/dist/layer2/ai-execution-sinks.js +496 -0
  68. package/dist/layer2/ai-execution-sinks.js.map +1 -0
  69. package/dist/layer2/ai-fingerprinting.d.ts +7 -0
  70. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -0
  71. package/dist/layer2/ai-fingerprinting.js +654 -0
  72. package/dist/layer2/ai-fingerprinting.js.map +1 -0
  73. package/dist/layer2/ai-prompt-hygiene.d.ts +19 -0
  74. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -0
  75. package/dist/layer2/ai-prompt-hygiene.js +356 -0
  76. package/dist/layer2/ai-prompt-hygiene.js.map +1 -0
  77. package/dist/layer2/ai-rag-safety.d.ts +21 -0
  78. package/dist/layer2/ai-rag-safety.d.ts.map +1 -0
  79. package/dist/layer2/ai-rag-safety.js +459 -0
  80. package/dist/layer2/ai-rag-safety.js.map +1 -0
  81. package/dist/layer2/ai-schema-validation.d.ts +25 -0
  82. package/dist/layer2/ai-schema-validation.d.ts.map +1 -0
  83. package/dist/layer2/ai-schema-validation.js +375 -0
  84. package/dist/layer2/ai-schema-validation.js.map +1 -0
  85. package/dist/layer2/auth-antipatterns.d.ts +20 -0
  86. package/dist/layer2/auth-antipatterns.d.ts.map +1 -0
  87. package/dist/layer2/auth-antipatterns.js +333 -0
  88. package/dist/layer2/auth-antipatterns.js.map +1 -0
  89. package/dist/layer2/byok-patterns.d.ts +12 -0
  90. package/dist/layer2/byok-patterns.d.ts.map +1 -0
  91. package/dist/layer2/byok-patterns.js +299 -0
  92. package/dist/layer2/byok-patterns.js.map +1 -0
  93. package/dist/layer2/dangerous-functions.d.ts +7 -0
  94. package/dist/layer2/dangerous-functions.d.ts.map +1 -0
  95. package/dist/layer2/dangerous-functions.js +1375 -0
  96. package/dist/layer2/dangerous-functions.js.map +1 -0
  97. package/dist/layer2/data-exposure.d.ts +16 -0
  98. package/dist/layer2/data-exposure.d.ts.map +1 -0
  99. package/dist/layer2/data-exposure.js +279 -0
  100. package/dist/layer2/data-exposure.js.map +1 -0
  101. package/dist/layer2/framework-checks.d.ts +7 -0
  102. package/dist/layer2/framework-checks.d.ts.map +1 -0
  103. package/dist/layer2/framework-checks.js +388 -0
  104. package/dist/layer2/framework-checks.js.map +1 -0
  105. package/dist/layer2/index.d.ts +58 -0
  106. package/dist/layer2/index.d.ts.map +1 -0
  107. package/dist/layer2/index.js +380 -0
  108. package/dist/layer2/index.js.map +1 -0
  109. package/dist/layer2/logic-gates.d.ts +7 -0
  110. package/dist/layer2/logic-gates.d.ts.map +1 -0
  111. package/dist/layer2/logic-gates.js +182 -0
  112. package/dist/layer2/logic-gates.js.map +1 -0
  113. package/dist/layer2/risky-imports.d.ts +7 -0
  114. package/dist/layer2/risky-imports.d.ts.map +1 -0
  115. package/dist/layer2/risky-imports.js +161 -0
  116. package/dist/layer2/risky-imports.js.map +1 -0
  117. package/dist/layer2/variables.d.ts +8 -0
  118. package/dist/layer2/variables.d.ts.map +1 -0
  119. package/dist/layer2/variables.js +152 -0
  120. package/dist/layer2/variables.js.map +1 -0
  121. package/dist/layer3/anthropic.d.ts +83 -0
  122. package/dist/layer3/anthropic.d.ts.map +1 -0
  123. package/dist/layer3/anthropic.js +1745 -0
  124. package/dist/layer3/anthropic.js.map +1 -0
  125. package/dist/layer3/index.d.ts +24 -0
  126. package/dist/layer3/index.d.ts.map +1 -0
  127. package/dist/layer3/index.js +119 -0
  128. package/dist/layer3/index.js.map +1 -0
  129. package/dist/layer3/openai.d.ts +25 -0
  130. package/dist/layer3/openai.d.ts.map +1 -0
  131. package/dist/layer3/openai.js +238 -0
  132. package/dist/layer3/openai.js.map +1 -0
  133. package/dist/layer3/package-check.d.ts +63 -0
  134. package/dist/layer3/package-check.d.ts.map +1 -0
  135. package/dist/layer3/package-check.js +508 -0
  136. package/dist/layer3/package-check.js.map +1 -0
  137. package/dist/modes/incremental.d.ts +66 -0
  138. package/dist/modes/incremental.d.ts.map +1 -0
  139. package/dist/modes/incremental.js +200 -0
  140. package/dist/modes/incremental.js.map +1 -0
  141. package/dist/tiers.d.ts +125 -0
  142. package/dist/tiers.d.ts.map +1 -0
  143. package/dist/tiers.js +234 -0
  144. package/dist/tiers.js.map +1 -0
  145. package/dist/types.d.ts +175 -0
  146. package/dist/types.d.ts.map +1 -0
  147. package/dist/types.js +50 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils/auth-helper-detector.d.ts +56 -0
  150. package/dist/utils/auth-helper-detector.d.ts.map +1 -0
  151. package/dist/utils/auth-helper-detector.js +360 -0
  152. package/dist/utils/auth-helper-detector.js.map +1 -0
  153. package/dist/utils/context-helpers.d.ts +96 -0
  154. package/dist/utils/context-helpers.d.ts.map +1 -0
  155. package/dist/utils/context-helpers.js +493 -0
  156. package/dist/utils/context-helpers.js.map +1 -0
  157. package/dist/utils/diff-detector.d.ts +53 -0
  158. package/dist/utils/diff-detector.d.ts.map +1 -0
  159. package/dist/utils/diff-detector.js +104 -0
  160. package/dist/utils/diff-detector.js.map +1 -0
  161. package/dist/utils/diff-parser.d.ts +80 -0
  162. package/dist/utils/diff-parser.d.ts.map +1 -0
  163. package/dist/utils/diff-parser.js +202 -0
  164. package/dist/utils/diff-parser.js.map +1 -0
  165. package/dist/utils/imported-auth-detector.d.ts +37 -0
  166. package/dist/utils/imported-auth-detector.d.ts.map +1 -0
  167. package/dist/utils/imported-auth-detector.js +251 -0
  168. package/dist/utils/imported-auth-detector.js.map +1 -0
  169. package/dist/utils/middleware-detector.d.ts +55 -0
  170. package/dist/utils/middleware-detector.d.ts.map +1 -0
  171. package/dist/utils/middleware-detector.js +260 -0
  172. package/dist/utils/middleware-detector.js.map +1 -0
  173. package/dist/utils/oauth-flow-detector.d.ts +41 -0
  174. package/dist/utils/oauth-flow-detector.d.ts.map +1 -0
  175. package/dist/utils/oauth-flow-detector.js +202 -0
  176. package/dist/utils/oauth-flow-detector.js.map +1 -0
  177. package/dist/utils/path-exclusions.d.ts +55 -0
  178. package/dist/utils/path-exclusions.d.ts.map +1 -0
  179. package/dist/utils/path-exclusions.js +222 -0
  180. package/dist/utils/path-exclusions.js.map +1 -0
  181. package/dist/utils/project-context-builder.d.ts +119 -0
  182. package/dist/utils/project-context-builder.d.ts.map +1 -0
  183. package/dist/utils/project-context-builder.js +534 -0
  184. package/dist/utils/project-context-builder.js.map +1 -0
  185. package/dist/utils/registry-clients.d.ts +93 -0
  186. package/dist/utils/registry-clients.d.ts.map +1 -0
  187. package/dist/utils/registry-clients.js +273 -0
  188. package/dist/utils/registry-clients.js.map +1 -0
  189. package/dist/utils/trpc-analyzer.d.ts +78 -0
  190. package/dist/utils/trpc-analyzer.d.ts.map +1 -0
  191. package/dist/utils/trpc-analyzer.js +297 -0
  192. package/dist/utils/trpc-analyzer.js.map +1 -0
  193. package/package.json +45 -0
  194. package/src/__tests__/benchmark/fixtures/false-positives.ts +227 -0
  195. package/src/__tests__/benchmark/fixtures/index.ts +68 -0
  196. package/src/__tests__/benchmark/fixtures/layer1/config-audit.ts +364 -0
  197. package/src/__tests__/benchmark/fixtures/layer1/hardcoded-secrets.ts +173 -0
  198. package/src/__tests__/benchmark/fixtures/layer1/high-entropy.ts +234 -0
  199. package/src/__tests__/benchmark/fixtures/layer1/index.ts +31 -0
  200. package/src/__tests__/benchmark/fixtures/layer1/sensitive-urls.ts +90 -0
  201. package/src/__tests__/benchmark/fixtures/layer1/weak-crypto.ts +197 -0
  202. package/src/__tests__/benchmark/fixtures/layer2/ai-agent-tools.ts +170 -0
  203. package/src/__tests__/benchmark/fixtures/layer2/ai-endpoint-protection.ts +418 -0
  204. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +189 -0
  205. package/src/__tests__/benchmark/fixtures/layer2/ai-fingerprinting.ts +316 -0
  206. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +178 -0
  207. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +184 -0
  208. package/src/__tests__/benchmark/fixtures/layer2/ai-schema-validation.ts +434 -0
  209. package/src/__tests__/benchmark/fixtures/layer2/auth-antipatterns.ts +159 -0
  210. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +112 -0
  211. package/src/__tests__/benchmark/fixtures/layer2/dangerous-functions.ts +246 -0
  212. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +168 -0
  213. package/src/__tests__/benchmark/fixtures/layer2/framework-checks.ts +346 -0
  214. package/src/__tests__/benchmark/fixtures/layer2/index.ts +67 -0
  215. package/src/__tests__/benchmark/fixtures/layer2/injection-vulnerabilities.ts +239 -0
  216. package/src/__tests__/benchmark/fixtures/layer2/logic-gates.ts +246 -0
  217. package/src/__tests__/benchmark/fixtures/layer2/risky-imports.ts +231 -0
  218. package/src/__tests__/benchmark/fixtures/layer2/variables.ts +167 -0
  219. package/src/__tests__/benchmark/index.ts +29 -0
  220. package/src/__tests__/benchmark/run-benchmark.ts +144 -0
  221. package/src/__tests__/benchmark/run-depth-validation.ts +206 -0
  222. package/src/__tests__/benchmark/run-real-world-test.ts +243 -0
  223. package/src/__tests__/benchmark/security-benchmark-script.ts +1737 -0
  224. package/src/__tests__/benchmark/tier-integration-script.ts +177 -0
  225. package/src/__tests__/benchmark/types.ts +144 -0
  226. package/src/__tests__/benchmark/utils/test-runner.ts +475 -0
  227. package/src/__tests__/regression/known-false-positives.test.ts +467 -0
  228. package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +178 -0
  229. package/src/__tests__/snapshots/scan-depth.test.ts +258 -0
  230. package/src/__tests__/validation/analyze-results.ts +542 -0
  231. package/src/__tests__/validation/extract-for-triage.ts +146 -0
  232. package/src/__tests__/validation/fp-deep-analysis.ts +327 -0
  233. package/src/__tests__/validation/run-validation.ts +364 -0
  234. package/src/__tests__/validation/triage-template.md +132 -0
  235. package/src/formatters/cli-terminal.ts +446 -0
  236. package/src/formatters/github-comment.ts +382 -0
  237. package/src/formatters/grouping.ts +190 -0
  238. package/src/formatters/index.ts +47 -0
  239. package/src/formatters/vscode-diagnostic.ts +243 -0
  240. package/src/index.ts +823 -0
  241. package/src/layer1/comments.ts +218 -0
  242. package/src/layer1/config-audit.ts +289 -0
  243. package/src/layer1/entropy.ts +583 -0
  244. package/src/layer1/file-flags.ts +127 -0
  245. package/src/layer1/index.ts +181 -0
  246. package/src/layer1/patterns.ts +516 -0
  247. package/src/layer1/urls.ts +334 -0
  248. package/src/layer1/weak-crypto.ts +328 -0
  249. package/src/layer2/ai-agent-tools.ts +601 -0
  250. package/src/layer2/ai-endpoint-protection.ts +387 -0
  251. package/src/layer2/ai-execution-sinks.ts +580 -0
  252. package/src/layer2/ai-fingerprinting.ts +758 -0
  253. package/src/layer2/ai-prompt-hygiene.ts +411 -0
  254. package/src/layer2/ai-rag-safety.ts +511 -0
  255. package/src/layer2/ai-schema-validation.ts +421 -0
  256. package/src/layer2/auth-antipatterns.ts +394 -0
  257. package/src/layer2/byok-patterns.ts +336 -0
  258. package/src/layer2/dangerous-functions.ts +1563 -0
  259. package/src/layer2/data-exposure.ts +315 -0
  260. package/src/layer2/framework-checks.ts +433 -0
  261. package/src/layer2/index.ts +473 -0
  262. package/src/layer2/logic-gates.ts +206 -0
  263. package/src/layer2/risky-imports.ts +186 -0
  264. package/src/layer2/variables.ts +166 -0
  265. package/src/layer3/anthropic.ts +2030 -0
  266. package/src/layer3/index.ts +130 -0
  267. package/src/layer3/package-check.ts +604 -0
  268. package/src/modes/incremental.ts +293 -0
  269. package/src/tiers.ts +318 -0
  270. package/src/types.ts +284 -0
  271. package/src/utils/auth-helper-detector.ts +443 -0
  272. package/src/utils/context-helpers.ts +535 -0
  273. package/src/utils/diff-detector.ts +135 -0
  274. package/src/utils/diff-parser.ts +272 -0
  275. package/src/utils/imported-auth-detector.ts +320 -0
  276. package/src/utils/middleware-detector.ts +333 -0
  277. package/src/utils/oauth-flow-detector.ts +246 -0
  278. package/src/utils/path-exclusions.ts +266 -0
  279. package/src/utils/project-context-builder.ts +707 -0
  280. package/src/utils/registry-clients.ts +351 -0
  281. 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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"}
@@ -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"}