@oculum/scanner 1.0.10 → 1.0.12

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 (520) hide show
  1. package/dist/ai-context/index.d.ts +6 -0
  2. package/dist/ai-context/index.d.ts.map +1 -0
  3. package/dist/ai-context/index.js +13 -0
  4. package/dist/ai-context/index.js.map +1 -0
  5. package/dist/ai-context/manager.d.ts +67 -0
  6. package/dist/ai-context/manager.d.ts.map +1 -0
  7. package/dist/ai-context/manager.js +104 -0
  8. package/dist/ai-context/manager.js.map +1 -0
  9. package/dist/baseline/diff.d.ts +32 -0
  10. package/dist/baseline/diff.d.ts.map +1 -0
  11. package/dist/baseline/diff.js +119 -0
  12. package/dist/baseline/diff.js.map +1 -0
  13. package/dist/baseline/index.d.ts +9 -0
  14. package/dist/baseline/index.d.ts.map +1 -0
  15. package/dist/baseline/index.js +19 -0
  16. package/dist/baseline/index.js.map +1 -0
  17. package/dist/baseline/manager.d.ts +67 -0
  18. package/dist/baseline/manager.d.ts.map +1 -0
  19. package/dist/baseline/manager.js +180 -0
  20. package/dist/baseline/manager.js.map +1 -0
  21. package/dist/baseline/types.d.ts +91 -0
  22. package/dist/baseline/types.d.ts.map +1 -0
  23. package/dist/baseline/types.js +12 -0
  24. package/dist/baseline/types.js.map +1 -0
  25. package/dist/category-filter.d.ts +125 -0
  26. package/dist/category-filter.d.ts.map +1 -0
  27. package/dist/category-filter.js +360 -0
  28. package/dist/category-filter.js.map +1 -0
  29. package/dist/filtering/context-adjustments.d.ts +23 -0
  30. package/dist/filtering/context-adjustments.d.ts.map +1 -0
  31. package/dist/filtering/context-adjustments.js +100 -0
  32. package/dist/filtering/context-adjustments.js.map +1 -0
  33. package/dist/filtering/index.d.ts +3 -0
  34. package/dist/filtering/index.d.ts.map +1 -0
  35. package/dist/filtering/index.js +8 -0
  36. package/dist/filtering/index.js.map +1 -0
  37. package/dist/filtering/pipeline.d.ts +48 -0
  38. package/dist/filtering/pipeline.d.ts.map +1 -0
  39. package/dist/filtering/pipeline.js +76 -0
  40. package/dist/filtering/pipeline.js.map +1 -0
  41. package/dist/formatters/ai-context.d.ts +23 -0
  42. package/dist/formatters/ai-context.d.ts.map +1 -0
  43. package/dist/formatters/ai-context.js +238 -0
  44. package/dist/formatters/ai-context.js.map +1 -0
  45. package/dist/formatters/cli-terminal.d.ts +38 -0
  46. package/dist/formatters/cli-terminal.d.ts.map +1 -1
  47. package/dist/formatters/cli-terminal.js +365 -42
  48. package/dist/formatters/cli-terminal.js.map +1 -1
  49. package/dist/formatters/github-comment.d.ts +2 -2
  50. package/dist/formatters/github-comment.d.ts.map +1 -1
  51. package/dist/formatters/github-comment.js +77 -13
  52. package/dist/formatters/github-comment.js.map +1 -1
  53. package/dist/formatters/ide/claude-code.d.ts +17 -0
  54. package/dist/formatters/ide/claude-code.d.ts.map +1 -0
  55. package/dist/formatters/ide/claude-code.js +94 -0
  56. package/dist/formatters/ide/claude-code.js.map +1 -0
  57. package/dist/formatters/ide/cursor.d.ts +13 -0
  58. package/dist/formatters/ide/cursor.d.ts.map +1 -0
  59. package/dist/formatters/ide/cursor.js +125 -0
  60. package/dist/formatters/ide/cursor.js.map +1 -0
  61. package/dist/formatters/ide/index.d.ts +62 -0
  62. package/dist/formatters/ide/index.d.ts.map +1 -0
  63. package/dist/formatters/ide/index.js +184 -0
  64. package/dist/formatters/ide/index.js.map +1 -0
  65. package/dist/formatters/ide/windsurf.d.ts +13 -0
  66. package/dist/formatters/ide/windsurf.d.ts.map +1 -0
  67. package/dist/formatters/ide/windsurf.js +117 -0
  68. package/dist/formatters/ide/windsurf.js.map +1 -0
  69. package/dist/formatters/index.d.ts +3 -1
  70. package/dist/formatters/index.d.ts.map +1 -1
  71. package/dist/formatters/index.js +20 -1
  72. package/dist/formatters/index.js.map +1 -1
  73. package/dist/index.d.ts +11 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +423 -56
  76. package/dist/index.js.map +1 -1
  77. package/dist/layer1/comments.d.ts +4 -1
  78. package/dist/layer1/comments.d.ts.map +1 -1
  79. package/dist/layer1/comments.js +1 -1
  80. package/dist/layer1/comments.js.map +1 -1
  81. package/dist/layer1/config-audit.d.ts +4 -1
  82. package/dist/layer1/config-audit.d.ts.map +1 -1
  83. package/dist/layer1/config-audit.js +65 -14
  84. package/dist/layer1/config-audit.js.map +1 -1
  85. package/dist/layer1/config-mcp-audit.d.ts +23 -0
  86. package/dist/layer1/config-mcp-audit.d.ts.map +1 -0
  87. package/dist/layer1/config-mcp-audit.js +239 -0
  88. package/dist/layer1/config-mcp-audit.js.map +1 -0
  89. package/dist/layer1/entropy.d.ts +4 -1
  90. package/dist/layer1/entropy.d.ts.map +1 -1
  91. package/dist/layer1/entropy.js +212 -1
  92. package/dist/layer1/entropy.js.map +1 -1
  93. package/dist/layer1/file-flags.d.ts +4 -1
  94. package/dist/layer1/file-flags.d.ts.map +1 -1
  95. package/dist/layer1/file-flags.js +12 -5
  96. package/dist/layer1/file-flags.js.map +1 -1
  97. package/dist/layer1/index.d.ts +1 -0
  98. package/dist/layer1/index.d.ts.map +1 -1
  99. package/dist/layer1/index.js +22 -19
  100. package/dist/layer1/index.js.map +1 -1
  101. package/dist/layer1/patterns.d.ts +4 -1
  102. package/dist/layer1/patterns.d.ts.map +1 -1
  103. package/dist/layer1/patterns.js +34 -4
  104. package/dist/layer1/patterns.js.map +1 -1
  105. package/dist/layer1/urls.d.ts +4 -1
  106. package/dist/layer1/urls.d.ts.map +1 -1
  107. package/dist/layer1/urls.js +162 -14
  108. package/dist/layer1/urls.js.map +1 -1
  109. package/dist/layer1/weak-crypto.d.ts +4 -1
  110. package/dist/layer1/weak-crypto.d.ts.map +1 -1
  111. package/dist/layer1/weak-crypto.js +144 -7
  112. package/dist/layer1/weak-crypto.js.map +1 -1
  113. package/dist/layer2/ai-agent-tools.d.ts +4 -1
  114. package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
  115. package/dist/layer2/ai-agent-tools.js +964 -2
  116. package/dist/layer2/ai-agent-tools.js.map +1 -1
  117. package/dist/layer2/ai-endpoint-protection.d.ts +2 -0
  118. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
  119. package/dist/layer2/ai-endpoint-protection.js +18 -4
  120. package/dist/layer2/ai-endpoint-protection.js.map +1 -1
  121. package/dist/layer2/ai-execution-sinks.d.ts +4 -1
  122. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
  123. package/dist/layer2/ai-execution-sinks.js +688 -29
  124. package/dist/layer2/ai-execution-sinks.js.map +1 -1
  125. package/dist/layer2/ai-fingerprinting.d.ts +4 -1
  126. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
  127. package/dist/layer2/ai-fingerprinting.js +28 -32
  128. package/dist/layer2/ai-fingerprinting.js.map +1 -1
  129. package/dist/layer2/ai-mcp-security.d.ts +20 -0
  130. package/dist/layer2/ai-mcp-security.d.ts.map +1 -0
  131. package/dist/layer2/ai-mcp-security.js +877 -0
  132. package/dist/layer2/ai-mcp-security.js.map +1 -0
  133. package/dist/layer2/ai-package-hallucination.d.ts +22 -0
  134. package/dist/layer2/ai-package-hallucination.d.ts.map +1 -0
  135. package/dist/layer2/ai-package-hallucination.js +828 -0
  136. package/dist/layer2/ai-package-hallucination.js.map +1 -0
  137. package/dist/layer2/ai-prompt-hygiene.d.ts +4 -1
  138. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
  139. package/dist/layer2/ai-prompt-hygiene.js +817 -17
  140. package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
  141. package/dist/layer2/ai-rag-safety.d.ts +4 -1
  142. package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
  143. package/dist/layer2/ai-rag-safety.js +454 -3
  144. package/dist/layer2/ai-rag-safety.js.map +1 -1
  145. package/dist/layer2/ai-schema-validation.d.ts +4 -1
  146. package/dist/layer2/ai-schema-validation.d.ts.map +1 -1
  147. package/dist/layer2/ai-schema-validation.js +2 -2
  148. package/dist/layer2/ai-schema-validation.js.map +1 -1
  149. package/dist/layer2/auth-antipatterns.d.ts +2 -0
  150. package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
  151. package/dist/layer2/auth-antipatterns.js +209 -20
  152. package/dist/layer2/auth-antipatterns.js.map +1 -1
  153. package/dist/layer2/byok-patterns.d.ts +4 -1
  154. package/dist/layer2/byok-patterns.d.ts.map +1 -1
  155. package/dist/layer2/byok-patterns.js +5 -2
  156. package/dist/layer2/byok-patterns.js.map +1 -1
  157. package/dist/layer2/dangerous-functions/child-process.d.ts +16 -0
  158. package/dist/layer2/dangerous-functions/child-process.d.ts.map +1 -0
  159. package/dist/layer2/dangerous-functions/child-process.js +74 -0
  160. package/dist/layer2/dangerous-functions/child-process.js.map +1 -0
  161. package/dist/layer2/dangerous-functions/dom-xss.d.ts +34 -0
  162. package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -0
  163. package/dist/layer2/dangerous-functions/dom-xss.js +230 -0
  164. package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -0
  165. package/dist/layer2/dangerous-functions/index.d.ts +16 -0
  166. package/dist/layer2/dangerous-functions/index.d.ts.map +1 -0
  167. package/dist/layer2/dangerous-functions/index.js +1152 -0
  168. package/dist/layer2/dangerous-functions/index.js.map +1 -0
  169. package/dist/layer2/dangerous-functions/json-parse.d.ts +31 -0
  170. package/dist/layer2/dangerous-functions/json-parse.d.ts.map +1 -0
  171. package/dist/layer2/dangerous-functions/json-parse.js +319 -0
  172. package/dist/layer2/dangerous-functions/json-parse.js.map +1 -0
  173. package/dist/layer2/dangerous-functions/math-random.d.ts +111 -0
  174. package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -0
  175. package/dist/layer2/dangerous-functions/math-random.js +684 -0
  176. package/dist/layer2/dangerous-functions/math-random.js.map +1 -0
  177. package/dist/layer2/dangerous-functions/patterns.d.ts +21 -0
  178. package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -0
  179. package/dist/layer2/dangerous-functions/patterns.js +163 -0
  180. package/dist/layer2/dangerous-functions/patterns.js.map +1 -0
  181. package/dist/layer2/dangerous-functions/request-validation.d.ts +13 -0
  182. package/dist/layer2/dangerous-functions/request-validation.d.ts.map +1 -0
  183. package/dist/layer2/dangerous-functions/request-validation.js +119 -0
  184. package/dist/layer2/dangerous-functions/request-validation.js.map +1 -0
  185. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +24 -0
  186. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -0
  187. package/dist/layer2/dangerous-functions/utils/control-flow.js +70 -0
  188. package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -0
  189. package/dist/layer2/dangerous-functions/utils/helpers.d.ts +31 -0
  190. package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -0
  191. package/dist/layer2/dangerous-functions/utils/helpers.js +147 -0
  192. package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -0
  193. package/dist/layer2/dangerous-functions/utils/index.d.ts +9 -0
  194. package/dist/layer2/dangerous-functions/utils/index.d.ts.map +1 -0
  195. package/dist/layer2/dangerous-functions/utils/index.js +23 -0
  196. package/dist/layer2/dangerous-functions/utils/index.js.map +1 -0
  197. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts +22 -0
  198. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
  199. package/dist/layer2/dangerous-functions/utils/schema-validation.js +102 -0
  200. package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -0
  201. package/dist/layer2/data-exposure.d.ts +4 -1
  202. package/dist/layer2/data-exposure.d.ts.map +1 -1
  203. package/dist/layer2/data-exposure.js +14 -38
  204. package/dist/layer2/data-exposure.js.map +1 -1
  205. package/dist/layer2/framework-checks.d.ts +4 -1
  206. package/dist/layer2/framework-checks.d.ts.map +1 -1
  207. package/dist/layer2/framework-checks.js +5 -2
  208. package/dist/layer2/framework-checks.js.map +1 -1
  209. package/dist/layer2/index.d.ts +12 -1
  210. package/dist/layer2/index.d.ts.map +1 -1
  211. package/dist/layer2/index.js +110 -45
  212. package/dist/layer2/index.js.map +1 -1
  213. package/dist/layer2/logic-gates.d.ts +4 -1
  214. package/dist/layer2/logic-gates.d.ts.map +1 -1
  215. package/dist/layer2/logic-gates.js +58 -20
  216. package/dist/layer2/logic-gates.js.map +1 -1
  217. package/dist/layer2/model-supply-chain.d.ts +23 -0
  218. package/dist/layer2/model-supply-chain.d.ts.map +1 -0
  219. package/dist/layer2/model-supply-chain.js +444 -0
  220. package/dist/layer2/model-supply-chain.js.map +1 -0
  221. package/dist/layer2/risky-imports.d.ts +4 -1
  222. package/dist/layer2/risky-imports.d.ts.map +1 -1
  223. package/dist/layer2/risky-imports.js +6 -2
  224. package/dist/layer2/risky-imports.js.map +1 -1
  225. package/dist/layer2/variables.d.ts +4 -1
  226. package/dist/layer2/variables.d.ts.map +1 -1
  227. package/dist/layer2/variables.js +6 -2
  228. package/dist/layer2/variables.js.map +1 -1
  229. package/dist/layer3/anthropic/auto-dismiss.d.ts +24 -0
  230. package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -0
  231. package/dist/layer3/anthropic/auto-dismiss.js +199 -0
  232. package/dist/layer3/anthropic/auto-dismiss.js.map +1 -0
  233. package/dist/layer3/anthropic/clients.d.ts +44 -0
  234. package/dist/layer3/anthropic/clients.d.ts.map +1 -0
  235. package/dist/layer3/anthropic/clients.js +81 -0
  236. package/dist/layer3/anthropic/clients.js.map +1 -0
  237. package/dist/layer3/anthropic/index.d.ts +41 -0
  238. package/dist/layer3/anthropic/index.d.ts.map +1 -0
  239. package/dist/layer3/anthropic/index.js +141 -0
  240. package/dist/layer3/anthropic/index.js.map +1 -0
  241. package/dist/layer3/anthropic/prompts/index.d.ts +8 -0
  242. package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -0
  243. package/dist/layer3/anthropic/prompts/index.js +14 -0
  244. package/dist/layer3/anthropic/prompts/index.js.map +1 -0
  245. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts +15 -0
  246. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts.map +1 -0
  247. package/dist/layer3/anthropic/prompts/semantic-analysis.js +169 -0
  248. package/dist/layer3/anthropic/prompts/semantic-analysis.js.map +1 -0
  249. package/dist/layer3/anthropic/prompts/validation.d.ts +12 -0
  250. package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -0
  251. package/dist/layer3/anthropic/prompts/validation.js +421 -0
  252. package/dist/layer3/anthropic/prompts/validation.js.map +1 -0
  253. package/dist/layer3/anthropic/providers/anthropic.d.ts +21 -0
  254. package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -0
  255. package/dist/layer3/anthropic/providers/anthropic.js +266 -0
  256. package/dist/layer3/anthropic/providers/anthropic.js.map +1 -0
  257. package/dist/layer3/anthropic/providers/index.d.ts +8 -0
  258. package/dist/layer3/anthropic/providers/index.d.ts.map +1 -0
  259. package/dist/layer3/anthropic/providers/index.js +15 -0
  260. package/dist/layer3/anthropic/providers/index.js.map +1 -0
  261. package/dist/layer3/anthropic/providers/openai.d.ts +18 -0
  262. package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -0
  263. package/dist/layer3/anthropic/providers/openai.js +340 -0
  264. package/dist/layer3/anthropic/providers/openai.js.map +1 -0
  265. package/dist/layer3/anthropic/request-builder.d.ts +20 -0
  266. package/dist/layer3/anthropic/request-builder.d.ts.map +1 -0
  267. package/dist/layer3/anthropic/request-builder.js +134 -0
  268. package/dist/layer3/anthropic/request-builder.js.map +1 -0
  269. package/dist/layer3/anthropic/types.d.ts +88 -0
  270. package/dist/layer3/anthropic/types.d.ts.map +1 -0
  271. package/dist/layer3/anthropic/types.js +38 -0
  272. package/dist/layer3/anthropic/types.js.map +1 -0
  273. package/dist/layer3/anthropic/utils/index.d.ts +9 -0
  274. package/dist/layer3/anthropic/utils/index.d.ts.map +1 -0
  275. package/dist/layer3/anthropic/utils/index.js +24 -0
  276. package/dist/layer3/anthropic/utils/index.js.map +1 -0
  277. package/dist/layer3/anthropic/utils/path-helpers.d.ts +21 -0
  278. package/dist/layer3/anthropic/utils/path-helpers.d.ts.map +1 -0
  279. package/dist/layer3/anthropic/utils/path-helpers.js +69 -0
  280. package/dist/layer3/anthropic/utils/path-helpers.js.map +1 -0
  281. package/dist/layer3/anthropic/utils/response-parser.d.ts +40 -0
  282. package/dist/layer3/anthropic/utils/response-parser.d.ts.map +1 -0
  283. package/dist/layer3/anthropic/utils/response-parser.js +285 -0
  284. package/dist/layer3/anthropic/utils/response-parser.js.map +1 -0
  285. package/dist/layer3/anthropic/utils/retry.d.ts +15 -0
  286. package/dist/layer3/anthropic/utils/retry.d.ts.map +1 -0
  287. package/dist/layer3/anthropic/utils/retry.js +62 -0
  288. package/dist/layer3/anthropic/utils/retry.js.map +1 -0
  289. package/dist/layer3/index.d.ts +1 -0
  290. package/dist/layer3/index.d.ts.map +1 -1
  291. package/dist/layer3/index.js +16 -6
  292. package/dist/layer3/index.js.map +1 -1
  293. package/dist/layer3/osv-check.d.ts +75 -0
  294. package/dist/layer3/osv-check.d.ts.map +1 -0
  295. package/dist/layer3/osv-check.js +308 -0
  296. package/dist/layer3/osv-check.js.map +1 -0
  297. package/dist/modes/incremental.js +1 -1
  298. package/dist/rules/framework-fixes.d.ts +48 -0
  299. package/dist/rules/framework-fixes.d.ts.map +1 -0
  300. package/dist/rules/framework-fixes.js +439 -0
  301. package/dist/rules/framework-fixes.js.map +1 -0
  302. package/dist/rules/index.d.ts +8 -0
  303. package/dist/rules/index.d.ts.map +1 -0
  304. package/dist/rules/index.js +18 -0
  305. package/dist/rules/index.js.map +1 -0
  306. package/dist/rules/metadata.d.ts +43 -0
  307. package/dist/rules/metadata.d.ts.map +1 -0
  308. package/dist/rules/metadata.js +734 -0
  309. package/dist/rules/metadata.js.map +1 -0
  310. package/dist/suppression/config-loader.d.ts +74 -0
  311. package/dist/suppression/config-loader.d.ts.map +1 -0
  312. package/dist/suppression/config-loader.js +424 -0
  313. package/dist/suppression/config-loader.js.map +1 -0
  314. package/dist/suppression/hash.d.ts +48 -0
  315. package/dist/suppression/hash.d.ts.map +1 -0
  316. package/dist/suppression/hash.js +88 -0
  317. package/dist/suppression/hash.js.map +1 -0
  318. package/dist/suppression/index.d.ts +11 -0
  319. package/dist/suppression/index.d.ts.map +1 -0
  320. package/dist/suppression/index.js +39 -0
  321. package/dist/suppression/index.js.map +1 -0
  322. package/dist/suppression/inline-parser.d.ts +39 -0
  323. package/dist/suppression/inline-parser.d.ts.map +1 -0
  324. package/dist/suppression/inline-parser.js +218 -0
  325. package/dist/suppression/inline-parser.js.map +1 -0
  326. package/dist/suppression/manager.d.ts +94 -0
  327. package/dist/suppression/manager.d.ts.map +1 -0
  328. package/dist/suppression/manager.js +292 -0
  329. package/dist/suppression/manager.js.map +1 -0
  330. package/dist/suppression/types.d.ts +151 -0
  331. package/dist/suppression/types.d.ts.map +1 -0
  332. package/dist/suppression/types.js +28 -0
  333. package/dist/suppression/types.js.map +1 -0
  334. package/dist/tiers.d.ts +3 -3
  335. package/dist/tiers.d.ts.map +1 -1
  336. package/dist/tiers.js +34 -7
  337. package/dist/tiers.js.map +1 -1
  338. package/dist/types.d.ts +140 -9
  339. package/dist/types.d.ts.map +1 -1
  340. package/dist/types.js +34 -0
  341. package/dist/types.js.map +1 -1
  342. package/dist/utils/code-analysis.d.ts +39 -0
  343. package/dist/utils/code-analysis.d.ts.map +1 -0
  344. package/dist/utils/code-analysis.js +159 -0
  345. package/dist/utils/code-analysis.js.map +1 -0
  346. package/dist/utils/comment-analyzer.d.ts +38 -0
  347. package/dist/utils/comment-analyzer.d.ts.map +1 -0
  348. package/dist/utils/comment-analyzer.js +218 -0
  349. package/dist/utils/comment-analyzer.js.map +1 -0
  350. package/dist/utils/context-helpers.d.ts +112 -1
  351. package/dist/utils/context-helpers.d.ts.map +1 -1
  352. package/dist/utils/context-helpers.js +364 -11
  353. package/dist/utils/context-helpers.js.map +1 -1
  354. package/dist/utils/environment-context.d.ts +76 -0
  355. package/dist/utils/environment-context.d.ts.map +1 -0
  356. package/dist/utils/environment-context.js +271 -0
  357. package/dist/utils/environment-context.js.map +1 -0
  358. package/dist/utils/intent-detector.d.ts +66 -0
  359. package/dist/utils/intent-detector.d.ts.map +1 -0
  360. package/dist/utils/intent-detector.js +282 -0
  361. package/dist/utils/intent-detector.js.map +1 -0
  362. package/dist/utils/parsed-file.d.ts +51 -0
  363. package/dist/utils/parsed-file.d.ts.map +1 -0
  364. package/dist/utils/parsed-file.js +95 -0
  365. package/dist/utils/parsed-file.js.map +1 -0
  366. package/dist/utils/route-hierarchy.d.ts +50 -0
  367. package/dist/utils/route-hierarchy.d.ts.map +1 -0
  368. package/dist/utils/route-hierarchy.js +226 -0
  369. package/dist/utils/route-hierarchy.js.map +1 -0
  370. package/dist/utils/schema-semantics.d.ts +45 -0
  371. package/dist/utils/schema-semantics.d.ts.map +1 -0
  372. package/dist/utils/schema-semantics.js +193 -0
  373. package/dist/utils/schema-semantics.js.map +1 -0
  374. package/package.json +4 -2
  375. package/src/__tests__/benchmark/fixtures/layer1/mcp-config-audit.json +31 -0
  376. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +1489 -82
  377. package/src/__tests__/benchmark/fixtures/layer2/ai-mcp-security.ts +495 -0
  378. package/src/__tests__/benchmark/fixtures/layer2/ai-package-hallucination.ts +255 -0
  379. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +300 -1
  380. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +139 -0
  381. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +7 -0
  382. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +63 -0
  383. package/src/__tests__/benchmark/fixtures/layer2/excessive-agency.ts +221 -0
  384. package/src/__tests__/benchmark/fixtures/layer2/index.ts +30 -0
  385. package/src/__tests__/benchmark/fixtures/layer2/model-supply-chain.ts +204 -0
  386. package/src/__tests__/benchmark/fixtures/layer2/phase1-enhancements.ts +157 -0
  387. package/src/__tests__/benchmark/fixtures/layer2/phase5-excessive-agency.ts +580 -0
  388. package/src/__tests__/benchmark/fixtures/layer2/sprint6-ai-enhancements.ts +515 -0
  389. package/src/__tests__/benchmark/run-depth-validation.ts +9 -9
  390. package/src/__tests__/category-filter.test.ts +478 -0
  391. package/src/__tests__/regression/known-false-positives.test.ts +490 -0
  392. package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +762 -0
  393. package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +503 -0
  394. package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +0 -9
  395. package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +321 -0
  396. package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +439 -0
  397. package/src/__tests__/validation/run-validation.ts +7 -7
  398. package/src/ai-context/__tests__/manager.test.ts +193 -0
  399. package/src/ai-context/index.ts +15 -0
  400. package/src/ai-context/manager.ts +145 -0
  401. package/src/baseline/__tests__/diff.test.ts +261 -0
  402. package/src/baseline/__tests__/manager.test.ts +225 -0
  403. package/src/baseline/diff.ts +135 -0
  404. package/src/baseline/index.ts +29 -0
  405. package/src/baseline/manager.ts +230 -0
  406. package/src/baseline/types.ts +97 -0
  407. package/src/category-filter.ts +400 -0
  408. package/src/filtering/__tests__/pipeline.test.ts +134 -0
  409. package/src/filtering/context-adjustments.ts +111 -0
  410. package/src/filtering/index.ts +10 -0
  411. package/src/filtering/pipeline.ts +130 -0
  412. package/src/formatters/__tests__/ai-context.test.ts +254 -0
  413. package/src/formatters/ai-context.ts +302 -0
  414. package/src/formatters/cli-terminal.ts +444 -41
  415. package/src/formatters/github-comment.ts +82 -14
  416. package/src/formatters/ide/__tests__/ide.test.ts +319 -0
  417. package/src/formatters/ide/claude-code.ts +110 -0
  418. package/src/formatters/ide/cursor.ts +147 -0
  419. package/src/formatters/ide/index.ts +216 -0
  420. package/src/formatters/ide/windsurf.ts +135 -0
  421. package/src/formatters/index.ts +28 -0
  422. package/src/index.ts +506 -45
  423. package/src/layer1/comments.ts +3 -1
  424. package/src/layer1/config-audit.ts +74 -14
  425. package/src/layer1/config-mcp-audit.ts +278 -0
  426. package/src/layer1/entropy.ts +234 -1
  427. package/src/layer1/file-flags.ts +17 -6
  428. package/src/layer1/index.ts +29 -23
  429. package/src/layer1/patterns.ts +42 -4
  430. package/src/layer1/urls.ts +188 -14
  431. package/src/layer1/weak-crypto.ts +168 -16
  432. package/src/layer2/ai-agent-tools.ts +1043 -2
  433. package/src/layer2/ai-endpoint-protection.ts +19 -4
  434. package/src/layer2/ai-execution-sinks.ts +755 -29
  435. package/src/layer2/ai-fingerprinting.ts +33 -33
  436. package/src/layer2/ai-mcp-security.ts +933 -0
  437. package/src/layer2/ai-package-hallucination.ts +940 -0
  438. package/src/layer2/ai-prompt-hygiene.ts +898 -17
  439. package/src/layer2/ai-rag-safety.ts +467 -5
  440. package/src/layer2/ai-schema-validation.ts +4 -2
  441. package/src/layer2/auth-antipatterns.ts +235 -20
  442. package/src/layer2/byok-patterns.ts +9 -3
  443. package/src/layer2/dangerous-functions/child-process.ts +98 -0
  444. package/src/layer2/dangerous-functions/dom-xss.ts +292 -0
  445. package/src/layer2/dangerous-functions/index.ts +1533 -0
  446. package/src/layer2/dangerous-functions/json-parse.ts +385 -0
  447. package/src/layer2/dangerous-functions/math-random.ts +789 -0
  448. package/src/layer2/dangerous-functions/patterns.ts +176 -0
  449. package/src/layer2/dangerous-functions/request-validation.ts +145 -0
  450. package/src/layer2/dangerous-functions/utils/control-flow.ts +35 -0
  451. package/src/layer2/dangerous-functions/utils/helpers.ts +170 -0
  452. package/src/layer2/dangerous-functions/utils/index.ts +25 -0
  453. package/src/layer2/dangerous-functions/utils/schema-validation.ts +106 -0
  454. package/src/layer2/data-exposure.ts +18 -39
  455. package/src/layer2/framework-checks.ts +9 -2
  456. package/src/layer2/index.ts +124 -43
  457. package/src/layer2/logic-gates.ts +64 -22
  458. package/src/layer2/model-supply-chain.ts +531 -0
  459. package/src/layer2/risky-imports.ts +9 -2
  460. package/src/layer2/variables.ts +9 -2
  461. package/src/layer3/__tests__/osv-check.test.ts +384 -0
  462. package/src/layer3/anthropic/auto-dismiss.ts +223 -0
  463. package/src/layer3/anthropic/clients.ts +84 -0
  464. package/src/layer3/anthropic/index.ts +170 -0
  465. package/src/layer3/anthropic/prompts/index.ts +14 -0
  466. package/src/layer3/anthropic/prompts/semantic-analysis.ts +173 -0
  467. package/src/layer3/anthropic/prompts/validation.ts +419 -0
  468. package/src/layer3/anthropic/providers/anthropic.ts +310 -0
  469. package/src/layer3/anthropic/providers/index.ts +8 -0
  470. package/src/layer3/anthropic/providers/openai.ts +384 -0
  471. package/src/layer3/anthropic/request-builder.ts +150 -0
  472. package/src/layer3/anthropic/types.ts +148 -0
  473. package/src/layer3/anthropic/utils/index.ts +26 -0
  474. package/src/layer3/anthropic/utils/path-helpers.ts +68 -0
  475. package/src/layer3/anthropic/utils/response-parser.ts +322 -0
  476. package/src/layer3/anthropic/utils/retry.ts +75 -0
  477. package/src/layer3/index.ts +18 -5
  478. package/src/layer3/osv-check.ts +420 -0
  479. package/src/modes/incremental.ts +1 -1
  480. package/src/rules/__tests__/framework-fixes.test.ts +689 -0
  481. package/src/rules/__tests__/metadata.test.ts +218 -0
  482. package/src/rules/framework-fixes.ts +470 -0
  483. package/src/rules/index.ts +21 -0
  484. package/src/rules/metadata.ts +831 -0
  485. package/src/suppression/__tests__/config-loader.test.ts +382 -0
  486. package/src/suppression/__tests__/hash.test.ts +166 -0
  487. package/src/suppression/__tests__/inline-parser.test.ts +212 -0
  488. package/src/suppression/__tests__/manager.test.ts +415 -0
  489. package/src/suppression/config-loader.ts +462 -0
  490. package/src/suppression/hash.ts +95 -0
  491. package/src/suppression/index.ts +51 -0
  492. package/src/suppression/inline-parser.ts +273 -0
  493. package/src/suppression/manager.ts +379 -0
  494. package/src/suppression/types.ts +174 -0
  495. package/src/tiers.ts +45 -9
  496. package/src/types.ts +212 -8
  497. package/src/utils/__tests__/code-analysis.test.ts +165 -0
  498. package/src/utils/__tests__/parsed-file.test.ts +124 -0
  499. package/src/utils/code-analysis.ts +179 -0
  500. package/src/utils/comment-analyzer.ts +249 -0
  501. package/src/utils/context-helpers.ts +421 -11
  502. package/src/utils/environment-context.ts +304 -0
  503. package/src/utils/intent-detector.ts +318 -0
  504. package/src/utils/parsed-file.ts +103 -0
  505. package/src/utils/route-hierarchy.ts +250 -0
  506. package/src/utils/schema-semantics.ts +233 -0
  507. package/dist/layer2/dangerous-functions.d.ts +0 -7
  508. package/dist/layer2/dangerous-functions.d.ts.map +0 -1
  509. package/dist/layer2/dangerous-functions.js +0 -1701
  510. package/dist/layer2/dangerous-functions.js.map +0 -1
  511. package/dist/layer3/anthropic.d.ts +0 -87
  512. package/dist/layer3/anthropic.d.ts.map +0 -1
  513. package/dist/layer3/anthropic.js +0 -1948
  514. package/dist/layer3/anthropic.js.map +0 -1
  515. package/dist/layer3/openai.d.ts +0 -25
  516. package/dist/layer3/openai.d.ts.map +0 -1
  517. package/dist/layer3/openai.js +0 -238
  518. package/dist/layer3/openai.js.map +0 -1
  519. package/src/layer2/dangerous-functions.ts +0 -1940
  520. package/src/layer3/anthropic.ts +0 -2257
@@ -1 +1 @@
1
- {"version":3,"file":"ai-prompt-hygiene.js","sourceRoot":"","sources":["../../src/layer2/ai-prompt-hygiene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-prompt-hygiene.js","sourceRoot":"","sources":["../../src/layer2/ai-prompt-hygiene.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  * - Context logging risks
10
10
  */
11
11
  import type { Vulnerability } from '../types';
12
+ import type { ParsedFile } from '../utils/parsed-file';
12
13
  /**
13
14
  * Check if a file is in a RAG/retrieval context based on path and content
14
15
  */
@@ -16,6 +17,8 @@ declare function isRAGContextFile(filePath: string, content: string): boolean;
16
17
  /**
17
18
  * Main detection function for RAG data safety issues
18
19
  */
19
- export declare function detectRAGSafetyIssues(content: string, filePath: string): Vulnerability[];
20
+ export declare function detectRAGSafetyIssues(content: string, filePath: string, options?: {
21
+ parsed?: ParsedFile;
22
+ }): Vulnerability[];
20
23
  export { isRAGContextFile };
21
24
  //# sourceMappingURL=ai-rag-safety.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-rag-safety.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-rag-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAgGpE;;GAEG;AACH,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA2CpE;AA2OD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAiHjB;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"ai-rag-safety.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-rag-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgD,MAAM,UAAU,CAAA;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAgGtD;;GAEG;AACH,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA2CpE;AA0lBD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GAChC,aAAa,EAAE,CA8MjB;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -347,12 +347,370 @@ const CONTEXT_LOGGING_PATTERNS = [
347
347
  },
348
348
  ];
349
349
  // ============================================================================
350
+ // AI Detection Roadmap Phase 1: Enhanced RAG Detection
351
+ // ============================================================================
352
+ /**
353
+ * Corpus Poisoning Patterns
354
+ * Detects user uploads directly embedded without sanitization
355
+ */
356
+ const CORPUS_POISONING_PATTERNS = [
357
+ // User content embedded directly
358
+ {
359
+ name: 'User content embedded directly',
360
+ pattern: /(?:embeddings?\.create|createEmbedding|embed)\s*\([^)]*(?:document\.content|user\.content|req\.body|req\.json|upload|file\.content)/gi,
361
+ riskType: 'corpus_poisoning',
362
+ baseSeverity: 'high',
363
+ description: 'User-provided content embedded directly without sanitization. Malicious instructions in uploads could poison the RAG corpus.',
364
+ suggestedFix: 'Sanitize user content before embedding: const sanitized = sanitizeForRAG(content); await embed(sanitized)',
365
+ },
366
+ // External content fetched and embedded
367
+ {
368
+ name: 'External content embedded without validation',
369
+ pattern: /(?:fetch|axios\.get|httpx\.get)\s*\([^)]+\)[^;]*(?:embed|addDocument|upsert|index)/gi,
370
+ riskType: 'corpus_poisoning',
371
+ baseSeverity: 'high',
372
+ description: 'External content fetched and embedded without validation. External sources could contain prompt injection payloads.',
373
+ suggestedFix: 'Validate and sanitize external content before embedding. Check source trustworthiness.',
374
+ },
375
+ // PDF/file content indexed without scanning
376
+ {
377
+ name: 'File content indexed without sanitization',
378
+ pattern: /(?:pdfParser|parse|readFile)[^;]*(?:addToCorpus|embedDocument|vectorStore\.add|index\.upsert)/gi,
379
+ riskType: 'corpus_poisoning',
380
+ baseSeverity: 'medium',
381
+ description: 'File content indexed without sanitization. PDFs and documents may contain hidden injection instructions.',
382
+ suggestedFix: 'Scan file content for injection patterns before indexing. Consider content classification.',
383
+ },
384
+ // User messages embedded
385
+ {
386
+ name: 'User messages embedded to corpus',
387
+ pattern: /(?:messages?|msg|chat)[^;]*(?:embedDocument|addToCorpus|vectorStore\.add)/gi,
388
+ riskType: 'corpus_poisoning',
389
+ baseSeverity: 'medium',
390
+ description: 'User messages being embedded into corpus. Messages could contain crafted injection payloads.',
391
+ suggestedFix: 'Filter user messages for instruction-like patterns. Use separate namespace for user content.',
392
+ },
393
+ // Direct upsert without sanitization
394
+ {
395
+ name: 'Direct vector upsert with user data',
396
+ pattern: /\.upsert\s*\(\s*\[\s*\{[^}]*content\s*:\s*(?:document|user|upload|req)/gi,
397
+ riskType: 'corpus_poisoning',
398
+ baseSeverity: 'high',
399
+ description: 'User data upserted directly to vector store. Content should be sanitized first.',
400
+ suggestedFix: 'Sanitize content before upserting: { content: sanitize(document.content), ... }',
401
+ },
402
+ ];
403
+ /**
404
+ * PII Leakage Patterns
405
+ * Detects PII fields in embedded documents or retrieval responses
406
+ */
407
+ const PII_LEAKAGE_PATTERNS = [
408
+ // PII fields in metadata
409
+ {
410
+ name: 'PII in document metadata',
411
+ pattern: /metadata\s*:\s*\{[^}]*(?:email|ssn|phone(?:Number)?|fullName|dateOfBirth|dob|address|socialSecurity)/gi,
412
+ riskType: 'pii_leakage',
413
+ baseSeverity: 'high',
414
+ description: 'PII fields stored in document metadata. This data will be exposed when documents are retrieved.',
415
+ suggestedFix: 'Remove PII from metadata. Store only non-sensitive identifiers: { userId: user.id, category: doc.type }',
416
+ },
417
+ // SSN/financial data in embedded docs
418
+ {
419
+ name: 'Sensitive financial/identity data embedded',
420
+ pattern: /(?:metadata|doc|document)\s*[:{][^}]*(?:ssn|socialSecurity|cardNumber|cvv|accountNum|insuranceId)/gi,
421
+ riskType: 'pii_leakage',
422
+ baseSeverity: 'critical',
423
+ description: 'Highly sensitive data (SSN, financial) in embedded documents. This is a compliance violation.',
424
+ suggestedFix: 'Never embed SSN, card numbers, or financial account data. Use tokenized references instead.',
425
+ },
426
+ // Patient/medical data in embeddings
427
+ {
428
+ name: 'PHI in embedded documents',
429
+ pattern: /(?:embed|metadata|doc)[^;]*(?:patientName|patientDob|patientSsn|medicalRecord|diagnosis)/gi,
430
+ riskType: 'pii_leakage',
431
+ baseSeverity: 'critical',
432
+ description: 'Protected Health Information (PHI) in embedded documents. HIPAA compliance violation.',
433
+ suggestedFix: 'Remove PHI before embedding. Use de-identification and tokenization for medical data.',
434
+ },
435
+ // Returning PII in search results
436
+ {
437
+ name: 'PII in retrieval response',
438
+ pattern: /return\s*(?:results\.map|docs\.map)[^}]*(?:email|phone|ssn|fullName|address)/gi,
439
+ riskType: 'pii_leakage',
440
+ baseSeverity: 'high',
441
+ description: 'PII fields returned in retrieval response. User PII may be exposed to unauthorized queries.',
442
+ suggestedFix: 'Filter PII from responses: return docs.map(d => ({ id: d.id, content: d.content })) // no PII',
443
+ },
444
+ // Direct metadata exposure with PII
445
+ {
446
+ name: 'Metadata with PII exposed in response',
447
+ pattern: /return\s*\{[^}]*metadata\.[^}]*(?:email|phone|ssn|name|address)/gi,
448
+ riskType: 'pii_leakage',
449
+ baseSeverity: 'high',
450
+ description: 'Document metadata containing PII exposed in response.',
451
+ suggestedFix: 'Filter metadata before returning. Only include non-sensitive fields.',
452
+ },
453
+ ];
454
+ // ============================================================================
455
+ // Phase 1 Enhancement Backlog: Advanced RAG Attack Detection
456
+ // ============================================================================
457
+ /**
458
+ * Query Injection Patterns
459
+ * Detects user queries used in retrieval without sanitization
460
+ */
461
+ const QUERY_INJECTION_PATTERNS = [
462
+ // User input directly in vector store query
463
+ {
464
+ name: 'User input directly in retrieval query',
465
+ pattern: /(?:vectorStore|retriever|index|collection)\.(?:query|invoke|search|similaritySearch)\s*\(\s*(?:req\.|user\.|input\.|body\.|params\.)/gi,
466
+ riskType: 'query_injection',
467
+ baseSeverity: 'high',
468
+ description: 'User input flows directly to vector store query without sanitization. Could manipulate retrieval results.',
469
+ suggestedFix: 'Validate and sanitize user queries: const sanitizedQuery = sanitizeQuery(userInput)',
470
+ },
471
+ // Query from request body without validation
472
+ {
473
+ name: 'Query from request body without validation',
474
+ pattern: /(?:const|let|var)\s*\{\s*query\s*\}.*(?:req\.body|req\.json|request\.body)[\s\S]{0,100}(?:search|query|retrieve|similaritySearch)/gi,
475
+ riskType: 'query_injection',
476
+ baseSeverity: 'medium',
477
+ description: 'Query destructured from request body and used in retrieval. Validate before use.',
478
+ suggestedFix: 'Add input validation: const { query } = validateSchema(req.body, querySchema)',
479
+ },
480
+ // Query template with user input interpolation
481
+ {
482
+ name: 'Query template with user input',
483
+ pattern: /(?:prompt|query|searchQuery)\s*=\s*[`'"].*\$\{.*(?:user|input|query|req).*\}.*[`'"]/gi,
484
+ riskType: 'query_injection',
485
+ baseSeverity: 'medium',
486
+ description: 'Query template interpolates user input. Could inject adversarial retrieval instructions.',
487
+ suggestedFix: 'Use parameterized queries or sanitize user input before interpolation.',
488
+ },
489
+ // Direct query passthrough in API
490
+ {
491
+ name: 'Query passthrough to vector store',
492
+ pattern: /app\.(?:post|get)\s*\([^)]+(?:search|query|retrieve)[^)]*\)[^{]*\{[^}]*(?:vectorStore|retriever)\.(?:query|search)\s*\(\s*(?:req|ctx)\.(?:body|query)/gi,
493
+ riskType: 'query_injection',
494
+ baseSeverity: 'high',
495
+ description: 'API endpoint passes request directly to vector store. No validation layer.',
496
+ suggestedFix: 'Add validation middleware. Sanitize and validate queries before retrieval.',
497
+ },
498
+ // No query length validation
499
+ {
500
+ name: 'Query without length validation',
501
+ pattern: /(?:query|search|retrieve)\s*\(\s*(?:userQuery|searchQuery|q)\s*\)(?![\s\S]{0,50}(?:\.length|\.trim\(\)|maxLength|minLength))/gi,
502
+ riskType: 'query_injection',
503
+ baseSeverity: 'low',
504
+ description: 'Query used without visible length validation. Consider adding bounds.',
505
+ suggestedFix: 'Add query length validation: if (query.length > MAX_QUERY_LENGTH) throw new Error("Query too long")',
506
+ },
507
+ ];
508
+ /**
509
+ * Embedding Poisoning Patterns
510
+ * Detects adversarial document embedding vulnerabilities
511
+ */
512
+ const EMBEDDING_POISONING_PATTERNS = [
513
+ // User document embedded without validation
514
+ {
515
+ name: 'User document embedded without validation',
516
+ pattern: /(?:embed|embeddings?\.(?:create|embed|generate)|createEmbedding)[\s\S]{0,50}(?:user|req\.|upload|file)[\s\S]{0,80}(?:vectorStore|index)\.(?:add|upsert|insert)/gis,
517
+ riskType: 'embedding_poisoning',
518
+ baseSeverity: 'high',
519
+ description: 'User-provided documents embedded directly. Adversarial content could poison retrieval.',
520
+ suggestedFix: 'Validate and sanitize user documents before embedding. Implement content classification.',
521
+ },
522
+ // Retrieval without similarity threshold
523
+ {
524
+ name: 'Retrieval without similarity threshold',
525
+ pattern: /similaritySearch\s*\(\s*[^,)]+\s*,\s*\d+\s*\)(?![\s\S]{0,50}(?:filter|threshold|score\s*>|minScore|scoreThreshold))/gi,
526
+ riskType: 'embedding_poisoning',
527
+ baseSeverity: 'medium',
528
+ description: 'Vector search without similarity threshold. Low-relevance adversarial content may be retrieved.',
529
+ suggestedFix: 'Add similarity threshold: similaritySearch(query, k, { scoreThreshold: 0.7 })',
530
+ },
531
+ // Batch embedding without deduplication
532
+ {
533
+ name: 'Batch embedding without duplicate detection',
534
+ pattern: /(?:for|forEach|map)\s*\([^)]+\)[\s\S]{0,100}(?:vectorStore|index)\.(?:add|upsert)(?![\s\S]{0,80}(?:exists|duplicate|similar|dedup))/gis,
535
+ riskType: 'embedding_poisoning',
536
+ baseSeverity: 'low',
537
+ description: 'Batch document embedding without duplicate detection. Attackers could flood corpus.',
538
+ suggestedFix: 'Check for duplicate or near-duplicate documents before embedding.',
539
+ },
540
+ // Dynamic embedding model selection
541
+ {
542
+ name: 'Dynamic embedding model from config',
543
+ pattern: /(?:embeddingModel|embeddings?)\s*=\s*(?:new\s+)?(?:config|options|params)\[?\s*['".]?(?:model|embedding)/gi,
544
+ riskType: 'embedding_poisoning',
545
+ baseSeverity: 'medium',
546
+ description: 'Embedding model selected from configuration. Malicious config could use compromised model.',
547
+ suggestedFix: 'Use hardcoded embedding model or validate against allowlist.',
548
+ },
549
+ // External URL content embedded
550
+ {
551
+ name: 'External URL content embedded directly',
552
+ pattern: /(?:fetch|axios\.get|httpx\.get)\s*\([^)]+\)[\s\S]{0,150}(?:embed|vectorStore\.add|index\.upsert)/gis,
553
+ riskType: 'embedding_poisoning',
554
+ baseSeverity: 'high',
555
+ description: 'Content from external URLs embedded without validation. Source could be compromised.',
556
+ suggestedFix: 'Validate URL source against allowlist. Sanitize fetched content before embedding.',
557
+ },
558
+ ];
559
+ /**
560
+ * Phase 6 Task 4: Cross-Tenant RAG Detection Patterns
561
+ * Detect shared vector stores without tenant filtering that could leak data
562
+ */
563
+ const CROSS_TENANT_PATTERNS = [
564
+ // Shared vector store without tenant filter
565
+ {
566
+ name: 'Shared vector store without tenant filter',
567
+ pattern: /\b(?:vectorStore|index|collection)\s*=\s*(?:new\s+)?(?:PineconeStore|ChromaDB|Weaviate|Qdrant|Milvus|PGVector|VectorStore)\s*\([^)]*\)(?![\s\S]{0,100}(?:filter|where|tenant|user|org|namespace))/gi,
568
+ riskType: 'unscoped_retrieval',
569
+ baseSeverity: 'high',
570
+ description: 'Vector store initialized without tenant filtering. In multi-tenant applications, this could leak data across tenants.',
571
+ suggestedFix: 'Always include tenant/user ID in vector store configuration or filters: new VectorStore({ namespace: tenantId })',
572
+ },
573
+ // Query without tenant in metadata filter
574
+ {
575
+ name: 'Vector query missing tenant filter',
576
+ pattern: /\.(?:query|search|similaritySearch)\s*\(\s*[^,)]+(?:,\s*\{[^}]*\})?\s*\)(?![\s\S]{0,80}(?:tenantId|tenant_id|orgId|org_id|userId|user_id|namespace))/gi,
577
+ riskType: 'unscoped_retrieval',
578
+ baseSeverity: 'high',
579
+ description: 'Vector store query without tenant filtering. Results may include documents from other tenants.',
580
+ suggestedFix: 'Add tenant filter to query: .query(q, { filter: { tenantId: ctx.tenant.id } })',
581
+ },
582
+ // Global index access pattern
583
+ {
584
+ name: 'Global index without scoping',
585
+ pattern: /(?:const|let|var)\s+(?:index|vectorIndex|searchIndex)\s*=\s*(?:await\s+)?(?:getIndex|loadIndex|connectIndex|initializeIndex)\s*\(\s*(?:['"`][^'"`]+['"`])?\s*\)(?![\s\S]{0,50}(?:tenant|user|org|scope))/gi,
586
+ riskType: 'unscoped_retrieval',
587
+ baseSeverity: 'medium',
588
+ description: 'Global index loaded without tenant scoping. Consider using tenant-specific indexes or namespaces.',
589
+ suggestedFix: 'Use tenant-scoped index: const index = await getIndex(tenantId) or use namespace parameter',
590
+ },
591
+ // Multi-tenant store without isolation
592
+ {
593
+ name: 'Multi-tenant store missing isolation',
594
+ pattern: /(?:multiTenant|shared|global)(?:Store|Index|Collection)\s*\.(?:query|search|add|upsert)(?![\s\S]{0,80}(?:tenantId|tenant_id|isolate|partition|namespace))/gi,
595
+ riskType: 'unscoped_retrieval',
596
+ baseSeverity: 'critical',
597
+ description: 'Multi-tenant store accessed without tenant isolation. Data from all tenants is accessible.',
598
+ suggestedFix: 'Always pass tenant identifier: multiTenantStore.query(q, { tenantId })',
599
+ },
600
+ // Embedding documents without tenant metadata
601
+ {
602
+ name: 'Document embedded without tenant metadata',
603
+ pattern: /\.(?:addDocuments|upsert|add)\s*\(\s*\[?\s*\{[^}]*(?:content|text|pageContent)[^}]*\}(?![^}]*(?:tenantId|tenant_id|orgId|organizationId|userId|user_id))/gi,
604
+ riskType: 'corpus_poisoning',
605
+ baseSeverity: 'high',
606
+ description: 'Documents embedded without tenant metadata. Without tenant ID, documents cannot be filtered per-tenant.',
607
+ suggestedFix: 'Include tenant ID in document metadata: { content, metadata: { tenantId: ctx.tenant.id } }',
608
+ },
609
+ // Retriever without tenant context
610
+ {
611
+ name: 'Retriever created without tenant context',
612
+ pattern: /(?:asRetriever|createRetriever|getRetriever)\s*\(\s*(?:\{[^}]*\})?\s*\)(?![\s\S]{0,80}(?:filter|tenant|user|org|metadata))/gi,
613
+ riskType: 'unscoped_retrieval',
614
+ baseSeverity: 'medium',
615
+ description: 'Retriever created without tenant filtering configuration. Retrieved documents may cross tenant boundaries.',
616
+ suggestedFix: 'Configure retriever with tenant filter: vectorStore.asRetriever({ filter: { tenantId } })',
617
+ },
618
+ // Semantic search across all tenants
619
+ {
620
+ name: 'Semantic search without tenant restriction',
621
+ pattern: /semanticSearch\s*\(\s*[^,)]+\s*\)(?![\s\S]{0,50}(?:tenant|user|org|filter|where|scope))/gi,
622
+ riskType: 'unscoped_retrieval',
623
+ baseSeverity: 'high',
624
+ description: 'Semantic search without tenant restriction. Search results span all tenants.',
625
+ suggestedFix: 'Add tenant restriction: semanticSearch(query, { tenantId: ctx.tenant.id })',
626
+ },
627
+ // RAG chain without tenant context
628
+ {
629
+ name: 'RAG chain missing tenant context',
630
+ pattern: /(?:createRetrievalChain|RetrievalQAChain|ConversationalRetrievalChain)\.(?:fromLLM|from)?\s*\([^)]*\)(?![\s\S]{0,100}(?:filter|tenant|user|metadata))/gi,
631
+ riskType: 'unscoped_retrieval',
632
+ baseSeverity: 'medium',
633
+ description: 'RAG chain created without tenant context. Chain may retrieve documents from all tenants.',
634
+ suggestedFix: 'Pass tenant-filtered retriever to chain or add metadata filtering',
635
+ },
636
+ ];
637
+ /**
638
+ * Chunk Boundary Exploitation Patterns
639
+ * Detects cross-chunk injection vulnerabilities
640
+ */
641
+ const CHUNK_INJECTION_PATTERNS = [
642
+ // User content chunked without per-chunk validation
643
+ {
644
+ name: 'User content chunked without validation',
645
+ pattern: /(?:splitter|textSplitter|chunker)\.(?:split|createDocuments|chunk)[\s\S]{0,50}(?:user|upload|req)[\s\S]{0,100}(?:vectorStore|index)\.(?:add|upsert)(?![\s\S]{0,50}(?:sanitize|validate|filter))/gis,
646
+ riskType: 'chunk_injection',
647
+ baseSeverity: 'medium',
648
+ description: 'User content split and embedded without per-chunk validation. Injection could span chunks.',
649
+ suggestedFix: 'Validate each chunk before embedding: chunks.map(c => sanitizeChunk(c))',
650
+ },
651
+ // Context joined without separators
652
+ {
653
+ name: 'Context chunks joined without separators',
654
+ pattern: /\.map\s*\([^)]*(?:pageContent|content|text)[^)]*\)\.join\s*\(\s*['"]['"]\s*\)/gi,
655
+ riskType: 'chunk_injection',
656
+ baseSeverity: 'low',
657
+ description: 'Retrieved chunks joined without separators. Adjacent chunk content could be misinterpreted.',
658
+ suggestedFix: 'Use clear separators: chunks.map(c => c.content).join("\\n---\\n")',
659
+ },
660
+ // Chunk metadata from user input
661
+ {
662
+ name: 'Chunk metadata from user input',
663
+ pattern: /(?:vectorStore|index)\.(?:add|upsert)[\s\S]{0,100}metadata\s*:\s*(?:user|req\.|input\.|body\.)/gi,
664
+ riskType: 'chunk_injection',
665
+ baseSeverity: 'medium',
666
+ description: 'Chunk metadata derived from user input. Could inject malicious metadata for filtering.',
667
+ suggestedFix: 'Generate metadata server-side. Validate any user-provided metadata fields.',
668
+ },
669
+ // No chunk size limits
670
+ {
671
+ name: 'Chunking without size validation',
672
+ pattern: /(?:splitter|textSplitter)\.(?:split|createDocuments)\s*\(\s*(?:content|text|document)(?![\s\S]{0,50}(?:maxChunkSize|chunkSize|maxLength))/gi,
673
+ riskType: 'chunk_injection',
674
+ baseSeverity: 'low',
675
+ description: 'Text splitting without explicit size limits. Very long inputs could cause issues.',
676
+ suggestedFix: 'Configure chunk size limits: new TextSplitter({ chunkSize: 1000, chunkOverlap: 200 })',
677
+ },
678
+ // Overlapping chunks with user content
679
+ {
680
+ name: 'Large chunk overlap with user content',
681
+ pattern: /(?:chunkOverlap|overlap)\s*[:=]\s*(?:\d{3,}|[a-zA-Z])[\s\S]{0,100}(?:user|upload)/gi,
682
+ riskType: 'chunk_injection',
683
+ baseSeverity: 'low',
684
+ description: 'Large chunk overlap configured. User-injected content could appear in multiple chunks.',
685
+ suggestedFix: 'Use reasonable overlap (10-20% of chunk size). Validate user content before chunking.',
686
+ },
687
+ ];
688
+ // ============================================================================
350
689
  // Main Detection Function
351
690
  // ============================================================================
691
+ /**
692
+ * Map risk type to vulnerability category
693
+ */
694
+ function mapRiskTypeToCategory(riskType) {
695
+ switch (riskType) {
696
+ case 'corpus_poisoning':
697
+ return 'ai_rag_corpus_poisoning';
698
+ case 'pii_leakage':
699
+ return 'ai_rag_pii_leakage';
700
+ case 'query_injection':
701
+ return 'ai_rag_query_injection';
702
+ case 'embedding_poisoning':
703
+ return 'ai_rag_embedding_poisoning';
704
+ case 'chunk_injection':
705
+ return 'ai_rag_chunk_injection';
706
+ default:
707
+ return 'ai_rag_exfiltration';
708
+ }
709
+ }
352
710
  /**
353
711
  * Main detection function for RAG data safety issues
354
712
  */
355
- function detectRAGSafetyIssues(content, filePath) {
713
+ function detectRAGSafetyIssues(content, filePath, options) {
356
714
  const vulnerabilities = [];
357
715
  // Skip non-applicable files
358
716
  if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
@@ -363,7 +721,7 @@ function detectRAGSafetyIssues(content, filePath) {
363
721
  if (!isRAGContextFile(filePath, content)) {
364
722
  return vulnerabilities;
365
723
  }
366
- const lines = content.split('\n');
724
+ const lines = options?.parsed?.lines ?? content.split('\n');
367
725
  const isTestFile = (0, context_helpers_1.isTestOrMockFile)(filePath);
368
726
  const isExample = (0, context_helpers_1.isExampleDirectory)(filePath);
369
727
  const isLibrary = (0, context_helpers_1.isLibraryCode)(filePath);
@@ -373,6 +731,15 @@ function detectRAGSafetyIssues(content, filePath) {
373
731
  ...UNSCOPED_RETRIEVAL_PATTERNS,
374
732
  ...CONTEXT_EXPOSURE_PATTERNS,
375
733
  ...CONTEXT_LOGGING_PATTERNS,
734
+ // AI Detection Roadmap Phase 1
735
+ ...CORPUS_POISONING_PATTERNS,
736
+ ...PII_LEAKAGE_PATTERNS,
737
+ // Phase 1 Enhancement Backlog
738
+ ...QUERY_INJECTION_PATTERNS,
739
+ ...EMBEDDING_POISONING_PATTERNS,
740
+ ...CHUNK_INJECTION_PATTERNS,
741
+ // Phase 6: Cross-tenant detection
742
+ ...CROSS_TENANT_PATTERNS,
376
743
  ];
377
744
  for (const pattern of allPatterns) {
378
745
  const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
@@ -419,6 +786,90 @@ function detectRAGSafetyIssues(content, filePath) {
419
786
  notes.push('Endpoint may be unauthenticated');
420
787
  }
421
788
  }
789
+ // Corpus poisoning - check for sanitization
790
+ if (pattern.riskType === 'corpus_poisoning') {
791
+ // Check for content sanitization in context
792
+ if (/sanitize|validate|filter|clean|strip/i.test(context)) {
793
+ severity = 'info';
794
+ notes.push('Content sanitization detected nearby');
795
+ }
796
+ // Check for content classification/scanning
797
+ if (/classify|scan|detect|check.*injection/i.test(context)) {
798
+ severity = 'info';
799
+ notes.push('Content scanning detected');
800
+ }
801
+ }
802
+ // PII leakage - critical data types remain high severity
803
+ if (pattern.riskType === 'pii_leakage') {
804
+ // Check for PII redaction/masking
805
+ if (/redact|mask|anonymize|deidentify|tokenize/i.test(context)) {
806
+ severity = 'info';
807
+ notes.push('PII redaction detected');
808
+ }
809
+ // SSN, CVV, and PHI patterns remain critical regardless of context
810
+ if (/ssn|cvv|patient/i.test(pattern.name.toLowerCase())) {
811
+ // Keep severity high/critical for these
812
+ }
813
+ }
814
+ // Query injection - check for input validation
815
+ if (pattern.riskType === 'query_injection') {
816
+ // Check for input validation/sanitization
817
+ if (/sanitize|validate|clean|escape|zod|schema\.parse|safeParse/i.test(context)) {
818
+ severity = 'low';
819
+ notes.push('Input validation detected nearby');
820
+ }
821
+ // Check for query length/bounds validation
822
+ if (/maxLength|minLength|\.length\s*[<>]|slice\s*\(\s*0/i.test(context)) {
823
+ if (severity === 'high')
824
+ severity = 'medium';
825
+ notes.push('Length validation detected');
826
+ }
827
+ // Check for rate limiting
828
+ if (/rateLimit|throttle|limiter/i.test(context)) {
829
+ if (severity === 'high')
830
+ severity = 'medium';
831
+ notes.push('Rate limiting detected');
832
+ }
833
+ }
834
+ // Embedding poisoning - check for content validation
835
+ if (pattern.riskType === 'embedding_poisoning') {
836
+ // Check for content sanitization
837
+ if (/sanitize|validate|filter|clean|strip|scan/i.test(context)) {
838
+ severity = 'low';
839
+ notes.push('Content validation detected nearby');
840
+ }
841
+ // Check for content classification
842
+ if (/classify|moderation|detect.*injection|contentFilter/i.test(context)) {
843
+ severity = 'info';
844
+ notes.push('Content classification detected');
845
+ }
846
+ // Check for similarity threshold
847
+ if (/threshold|scoreThreshold|minScore|score\s*>/i.test(context)) {
848
+ if (severity === 'medium')
849
+ severity = 'low';
850
+ notes.push('Similarity threshold configured');
851
+ }
852
+ }
853
+ // Chunk injection - check for chunk validation
854
+ if (pattern.riskType === 'chunk_injection') {
855
+ // Check for per-chunk validation
856
+ if (/chunks?\.map\s*\([^)]*sanitize|validate.*chunk|chunk.*validate/i.test(context)) {
857
+ severity = 'info';
858
+ notes.push('Chunk validation detected');
859
+ }
860
+ // Check for separator usage
861
+ if (/separator|delimiter|join\s*\(\s*['"][^'"]{2,}['"]\s*\)/i.test(context)) {
862
+ if (severity === 'low')
863
+ severity = 'info';
864
+ notes.push('Chunk separators detected');
865
+ }
866
+ // Check for metadata sanitization
867
+ if (/metadata\s*[:=]\s*\{[^}]*(?:id|type|source)[^}]*\}/i.test(context)) {
868
+ if (severity === 'medium')
869
+ severity = 'low';
870
+ notes.push('Server-generated metadata pattern');
871
+ }
872
+ }
422
873
  // Downgrade test files
423
874
  if (isTestFile) {
424
875
  severity = 'info';
@@ -444,7 +895,7 @@ function detectRAGSafetyIssues(content, filePath) {
444
895
  lineNumber,
445
896
  lineContent,
446
897
  severity,
447
- category: 'ai_rag_exfiltration',
898
+ category: mapRiskTypeToCategory(pattern.riskType),
448
899
  title: pattern.name,
449
900
  description,
450
901
  suggestedFix: pattern.suggestedFix,