hackmyagent 0.7.2 → 0.8.1

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 (393) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +172 -261
  3. package/dist/abgr/controls.d.ts +35 -0
  4. package/dist/abgr/controls.d.ts.map +1 -0
  5. package/dist/abgr/controls.js +1058 -0
  6. package/dist/abgr/controls.js.map +1 -0
  7. package/dist/abgr/detector.d.ts +45 -0
  8. package/dist/abgr/detector.d.ts.map +1 -0
  9. package/dist/abgr/detector.js +175 -0
  10. package/dist/abgr/detector.js.map +1 -0
  11. package/dist/abgr/index.d.ts +24 -0
  12. package/dist/abgr/index.d.ts.map +1 -0
  13. package/dist/abgr/index.js +50 -0
  14. package/dist/abgr/index.js.map +1 -0
  15. package/dist/abgr/scorer.d.ts +36 -0
  16. package/dist/abgr/scorer.d.ts.map +1 -0
  17. package/dist/abgr/scorer.js +205 -0
  18. package/dist/abgr/scorer.js.map +1 -0
  19. package/dist/abgr/templates.d.ts +35 -0
  20. package/dist/abgr/templates.d.ts.map +1 -0
  21. package/dist/abgr/templates.js +668 -0
  22. package/dist/abgr/templates.js.map +1 -0
  23. package/dist/abgr/tier.d.ts +27 -0
  24. package/dist/abgr/tier.d.ts.map +1 -0
  25. package/dist/abgr/tier.js +115 -0
  26. package/dist/abgr/tier.js.map +1 -0
  27. package/dist/abgr/types.d.ts +59 -0
  28. package/dist/abgr/types.d.ts.map +1 -0
  29. package/dist/abgr/types.js +10 -0
  30. package/dist/abgr/types.js.map +1 -0
  31. package/dist/agent-scan/checks.d.ts +6 -0
  32. package/dist/agent-scan/checks.d.ts.map +1 -0
  33. package/dist/agent-scan/checks.js +93 -0
  34. package/dist/agent-scan/checks.js.map +1 -0
  35. package/dist/agent-scan/index.d.ts +10 -0
  36. package/dist/agent-scan/index.d.ts.map +1 -0
  37. package/dist/agent-scan/index.js +16 -0
  38. package/dist/agent-scan/index.js.map +1 -0
  39. package/dist/agent-scan/scanner.d.ts +31 -0
  40. package/dist/agent-scan/scanner.d.ts.map +1 -0
  41. package/dist/agent-scan/scanner.js +484 -0
  42. package/dist/agent-scan/scanner.js.map +1 -0
  43. package/dist/agent-scan/types.d.ts +63 -0
  44. package/dist/agent-scan/types.d.ts.map +1 -0
  45. package/dist/agent-scan/types.js +10 -0
  46. package/dist/agent-scan/types.js.map +1 -0
  47. package/dist/arp/cli/index.d.ts +3 -0
  48. package/dist/arp/cli/index.d.ts.map +1 -0
  49. package/dist/arp/cli/index.js +225 -0
  50. package/dist/arp/cli/index.js.map +1 -0
  51. package/dist/arp/config/loader.d.ts +8 -0
  52. package/dist/arp/config/loader.d.ts.map +1 -0
  53. package/dist/arp/config/loader.js +102 -0
  54. package/dist/arp/config/loader.js.map +1 -0
  55. package/dist/arp/enforcement/kill-switch.d.ts +22 -0
  56. package/dist/arp/enforcement/kill-switch.d.ts.map +1 -0
  57. package/dist/arp/enforcement/kill-switch.js +122 -0
  58. package/dist/arp/enforcement/kill-switch.js.map +1 -0
  59. package/dist/arp/engine/event-engine.d.ts +29 -0
  60. package/dist/arp/engine/event-engine.d.ts.map +1 -0
  61. package/dist/arp/engine/event-engine.js +233 -0
  62. package/dist/arp/engine/event-engine.js.map +1 -0
  63. package/dist/arp/index.d.ts +81 -0
  64. package/dist/arp/index.d.ts.map +1 -0
  65. package/dist/arp/index.js +239 -0
  66. package/dist/arp/index.js.map +1 -0
  67. package/dist/arp/intelligence/adapters.d.ts +45 -0
  68. package/dist/arp/intelligence/adapters.d.ts.map +1 -0
  69. package/dist/arp/intelligence/adapters.js +222 -0
  70. package/dist/arp/intelligence/adapters.js.map +1 -0
  71. package/dist/arp/intelligence/anomaly.d.ts +32 -0
  72. package/dist/arp/intelligence/anomaly.d.ts.map +1 -0
  73. package/dist/arp/intelligence/anomaly.js +80 -0
  74. package/dist/arp/intelligence/anomaly.js.map +1 -0
  75. package/dist/arp/intelligence/budget.d.ts +33 -0
  76. package/dist/arp/intelligence/budget.d.ts.map +1 -0
  77. package/dist/arp/intelligence/budget.js +150 -0
  78. package/dist/arp/intelligence/budget.js.map +1 -0
  79. package/dist/arp/intelligence/coordinator.d.ts +43 -0
  80. package/dist/arp/intelligence/coordinator.d.ts.map +1 -0
  81. package/dist/arp/intelligence/coordinator.js +301 -0
  82. package/dist/arp/intelligence/coordinator.js.map +1 -0
  83. package/dist/arp/interceptors/a2a-protocol.d.ts +29 -0
  84. package/dist/arp/interceptors/a2a-protocol.d.ts.map +1 -0
  85. package/dist/arp/interceptors/a2a-protocol.js +111 -0
  86. package/dist/arp/interceptors/a2a-protocol.js.map +1 -0
  87. package/dist/arp/interceptors/filesystem.d.ts +33 -0
  88. package/dist/arp/interceptors/filesystem.d.ts.map +1 -0
  89. package/dist/arp/interceptors/filesystem.js +199 -0
  90. package/dist/arp/interceptors/filesystem.js.map +1 -0
  91. package/dist/arp/interceptors/mcp-protocol.d.ts +25 -0
  92. package/dist/arp/interceptors/mcp-protocol.d.ts.map +1 -0
  93. package/dist/arp/interceptors/mcp-protocol.js +126 -0
  94. package/dist/arp/interceptors/mcp-protocol.js.map +1 -0
  95. package/dist/arp/interceptors/network.d.ts +26 -0
  96. package/dist/arp/interceptors/network.d.ts.map +1 -0
  97. package/dist/arp/interceptors/network.js +146 -0
  98. package/dist/arp/interceptors/network.js.map +1 -0
  99. package/dist/arp/interceptors/process.d.ts +26 -0
  100. package/dist/arp/interceptors/process.d.ts.map +1 -0
  101. package/dist/arp/interceptors/process.js +157 -0
  102. package/dist/arp/interceptors/process.js.map +1 -0
  103. package/dist/arp/interceptors/prompt.d.ts +29 -0
  104. package/dist/arp/interceptors/prompt.d.ts.map +1 -0
  105. package/dist/arp/interceptors/prompt.js +82 -0
  106. package/dist/arp/interceptors/prompt.js.map +1 -0
  107. package/dist/arp/license/index.d.ts +59 -0
  108. package/dist/arp/license/index.d.ts.map +1 -0
  109. package/dist/arp/license/index.js +78 -0
  110. package/dist/arp/license/index.js.map +1 -0
  111. package/dist/arp/monitors/filesystem.d.ts +21 -0
  112. package/dist/arp/monitors/filesystem.d.ts.map +1 -0
  113. package/dist/arp/monitors/filesystem.js +141 -0
  114. package/dist/arp/monitors/filesystem.js.map +1 -0
  115. package/dist/arp/monitors/network.d.ts +32 -0
  116. package/dist/arp/monitors/network.d.ts.map +1 -0
  117. package/dist/arp/monitors/network.js +301 -0
  118. package/dist/arp/monitors/network.js.map +1 -0
  119. package/dist/arp/monitors/process.d.ts +24 -0
  120. package/dist/arp/monitors/process.d.ts.map +1 -0
  121. package/dist/arp/monitors/process.js +205 -0
  122. package/dist/arp/monitors/process.js.map +1 -0
  123. package/dist/arp/patterns/ai-threats.d.ts +48 -0
  124. package/dist/arp/patterns/ai-threats.d.ts.map +1 -0
  125. package/dist/arp/patterns/ai-threats.js +215 -0
  126. package/dist/arp/patterns/ai-threats.js.map +1 -0
  127. package/dist/arp/proxy/forward.d.ts +23 -0
  128. package/dist/arp/proxy/forward.d.ts.map +1 -0
  129. package/dist/arp/proxy/forward.js +152 -0
  130. package/dist/arp/proxy/forward.js.map +1 -0
  131. package/dist/arp/proxy/server.d.ts +45 -0
  132. package/dist/arp/proxy/server.d.ts.map +1 -0
  133. package/dist/arp/proxy/server.js +331 -0
  134. package/dist/arp/proxy/server.js.map +1 -0
  135. package/dist/arp/reporting/local-log.d.ts +22 -0
  136. package/dist/arp/reporting/local-log.d.ts.map +1 -0
  137. package/dist/arp/reporting/local-log.js +116 -0
  138. package/dist/arp/reporting/local-log.js.map +1 -0
  139. package/dist/arp/types.d.ts +230 -0
  140. package/dist/arp/types.d.ts.map +1 -0
  141. package/dist/arp/types.js +4 -0
  142. package/dist/arp/types.js.map +1 -0
  143. package/dist/attack/custom-payloads.d.ts +11 -0
  144. package/dist/attack/custom-payloads.d.ts.map +1 -0
  145. package/dist/attack/custom-payloads.js +108 -0
  146. package/dist/attack/custom-payloads.js.map +1 -0
  147. package/dist/attack/fail-policy.d.ts +16 -0
  148. package/dist/attack/fail-policy.d.ts.map +1 -0
  149. package/dist/attack/fail-policy.js +36 -0
  150. package/dist/attack/fail-policy.js.map +1 -0
  151. package/dist/attack/index.d.ts +12 -0
  152. package/dist/attack/index.d.ts.map +1 -0
  153. package/dist/attack/index.js +30 -0
  154. package/dist/attack/index.js.map +1 -0
  155. package/dist/attack/payloads/a2a-attacks.d.ts +12 -0
  156. package/dist/attack/payloads/a2a-attacks.d.ts.map +1 -0
  157. package/dist/attack/payloads/a2a-attacks.js +221 -0
  158. package/dist/attack/payloads/a2a-attacks.js.map +1 -0
  159. package/dist/attack/payloads/capability-abuse.d.ts +8 -0
  160. package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
  161. package/dist/attack/payloads/capability-abuse.js +222 -0
  162. package/dist/attack/payloads/capability-abuse.js.map +1 -0
  163. package/dist/attack/payloads/context-manipulation.d.ts +8 -0
  164. package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
  165. package/dist/attack/payloads/context-manipulation.js +217 -0
  166. package/dist/attack/payloads/context-manipulation.js.map +1 -0
  167. package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
  168. package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
  169. package/dist/attack/payloads/data-exfiltration.js +249 -0
  170. package/dist/attack/payloads/data-exfiltration.js.map +1 -0
  171. package/dist/attack/payloads/index.d.ts +29 -0
  172. package/dist/attack/payloads/index.d.ts.map +1 -0
  173. package/dist/attack/payloads/index.js +76 -0
  174. package/dist/attack/payloads/index.js.map +1 -0
  175. package/dist/attack/payloads/jailbreak.d.ts +8 -0
  176. package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
  177. package/dist/attack/payloads/jailbreak.js +265 -0
  178. package/dist/attack/payloads/jailbreak.js.map +1 -0
  179. package/dist/attack/payloads/mcp-exploitation.d.ts +12 -0
  180. package/dist/attack/payloads/mcp-exploitation.d.ts.map +1 -0
  181. package/dist/attack/payloads/mcp-exploitation.js +221 -0
  182. package/dist/attack/payloads/mcp-exploitation.js.map +1 -0
  183. package/dist/attack/payloads/prompt-injection.d.ts +8 -0
  184. package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
  185. package/dist/attack/payloads/prompt-injection.js +262 -0
  186. package/dist/attack/payloads/prompt-injection.js.map +1 -0
  187. package/dist/attack/scanner.d.ts +84 -0
  188. package/dist/attack/scanner.d.ts.map +1 -0
  189. package/dist/attack/scanner.js +509 -0
  190. package/dist/attack/scanner.js.map +1 -0
  191. package/dist/attack/types.d.ts +153 -0
  192. package/dist/attack/types.d.ts.map +1 -0
  193. package/dist/attack/types.js +46 -0
  194. package/dist/attack/types.js.map +1 -0
  195. package/dist/benchmarks/index.d.ts +16 -0
  196. package/dist/benchmarks/index.d.ts.map +1 -0
  197. package/dist/benchmarks/index.js +27 -0
  198. package/dist/benchmarks/index.js.map +1 -0
  199. package/dist/benchmarks/oasb-1.d.ts +112 -0
  200. package/dist/benchmarks/oasb-1.d.ts.map +1 -0
  201. package/dist/benchmarks/oasb-1.js +1124 -0
  202. package/dist/benchmarks/oasb-1.js.map +1 -0
  203. package/dist/checker/check-skill.d.ts +48 -0
  204. package/dist/checker/check-skill.d.ts.map +1 -0
  205. package/dist/checker/check-skill.js +105 -0
  206. package/dist/checker/check-skill.js.map +1 -0
  207. package/dist/checker/index.d.ts +12 -0
  208. package/dist/checker/index.d.ts.map +1 -0
  209. package/dist/checker/index.js +16 -0
  210. package/dist/checker/index.js.map +1 -0
  211. package/dist/checker/permission-analyzer.d.ts +12 -0
  212. package/dist/checker/permission-analyzer.d.ts.map +1 -0
  213. package/dist/checker/permission-analyzer.js +84 -0
  214. package/dist/checker/permission-analyzer.js.map +1 -0
  215. package/dist/checker/publisher-verifier.d.ts +34 -0
  216. package/dist/checker/publisher-verifier.d.ts.map +1 -0
  217. package/dist/checker/publisher-verifier.js +121 -0
  218. package/dist/checker/publisher-verifier.js.map +1 -0
  219. package/dist/checker/skill-identifier.d.ts +14 -0
  220. package/dist/checker/skill-identifier.d.ts.map +1 -0
  221. package/dist/checker/skill-identifier.js +55 -0
  222. package/dist/checker/skill-identifier.js.map +1 -0
  223. package/dist/cli.d.ts +7 -0
  224. package/dist/cli.d.ts.map +1 -0
  225. package/dist/cli.js +3534 -0
  226. package/dist/cli.js.map +1 -0
  227. package/dist/hardening/index.d.ts +7 -0
  228. package/dist/hardening/index.d.ts.map +1 -0
  229. package/dist/hardening/index.js +9 -0
  230. package/dist/hardening/index.js.map +1 -0
  231. package/dist/hardening/llm-checks.d.ts +18 -0
  232. package/dist/hardening/llm-checks.d.ts.map +1 -0
  233. package/dist/hardening/llm-checks.js +434 -0
  234. package/dist/hardening/llm-checks.js.map +1 -0
  235. package/dist/hardening/mcp-tool-enum.d.ts +45 -0
  236. package/dist/hardening/mcp-tool-enum.d.ts.map +1 -0
  237. package/dist/hardening/mcp-tool-enum.js +315 -0
  238. package/dist/hardening/mcp-tool-enum.js.map +1 -0
  239. package/dist/hardening/scanner.d.ts +147 -0
  240. package/dist/hardening/scanner.d.ts.map +1 -0
  241. package/dist/hardening/scanner.js +5445 -0
  242. package/dist/hardening/scanner.js.map +1 -0
  243. package/dist/hardening/security-check.d.ts +85 -0
  244. package/dist/hardening/security-check.d.ts.map +1 -0
  245. package/dist/hardening/security-check.js +6 -0
  246. package/dist/hardening/security-check.js.map +1 -0
  247. package/dist/hardening/shell-checks.d.ts +21 -0
  248. package/dist/hardening/shell-checks.d.ts.map +1 -0
  249. package/dist/hardening/shell-checks.js +236 -0
  250. package/dist/hardening/shell-checks.js.map +1 -0
  251. package/dist/index.d.ts +38 -4
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +91 -3525
  254. package/dist/index.js.map +1 -1
  255. package/dist/mcp-server.js +10 -10
  256. package/dist/mcp-server.js.map +1 -1
  257. package/dist/oasb/config/dvaa-targets.d.ts +13 -0
  258. package/dist/oasb/config/dvaa-targets.d.ts.map +1 -0
  259. package/dist/oasb/config/dvaa-targets.js +89 -0
  260. package/dist/oasb/config/dvaa-targets.js.map +1 -0
  261. package/dist/oasb/harness/arp-wrapper.d.ts +29 -0
  262. package/dist/oasb/harness/arp-wrapper.d.ts.map +1 -0
  263. package/dist/oasb/harness/arp-wrapper.js +134 -0
  264. package/dist/oasb/harness/arp-wrapper.js.map +1 -0
  265. package/dist/oasb/harness/dvaa-client.d.ts +46 -0
  266. package/dist/oasb/harness/dvaa-client.d.ts.map +1 -0
  267. package/dist/oasb/harness/dvaa-client.js +98 -0
  268. package/dist/oasb/harness/dvaa-client.js.map +1 -0
  269. package/dist/oasb/harness/dvaa-manager.d.ts +17 -0
  270. package/dist/oasb/harness/dvaa-manager.d.ts.map +1 -0
  271. package/dist/oasb/harness/dvaa-manager.js +132 -0
  272. package/dist/oasb/harness/dvaa-manager.js.map +1 -0
  273. package/dist/oasb/harness/event-collector.d.ts +33 -0
  274. package/dist/oasb/harness/event-collector.d.ts.map +1 -0
  275. package/dist/oasb/harness/event-collector.js +86 -0
  276. package/dist/oasb/harness/event-collector.js.map +1 -0
  277. package/dist/oasb/harness/metrics.d.ts +14 -0
  278. package/dist/oasb/harness/metrics.d.ts.map +1 -0
  279. package/dist/oasb/harness/metrics.js +56 -0
  280. package/dist/oasb/harness/metrics.js.map +1 -0
  281. package/dist/oasb/harness/mock-llm-adapter.d.ts +34 -0
  282. package/dist/oasb/harness/mock-llm-adapter.d.ts.map +1 -0
  283. package/dist/oasb/harness/mock-llm-adapter.js +69 -0
  284. package/dist/oasb/harness/mock-llm-adapter.js.map +1 -0
  285. package/dist/oasb/harness/types.d.ts +74 -0
  286. package/dist/oasb/harness/types.d.ts.map +1 -0
  287. package/dist/oasb/harness/types.js +3 -0
  288. package/dist/oasb/harness/types.js.map +1 -0
  289. package/dist/plugins/core.d.ts +109 -0
  290. package/dist/plugins/core.d.ts.map +1 -0
  291. package/dist/plugins/core.js +30 -0
  292. package/dist/plugins/core.js.map +1 -0
  293. package/dist/plugins/credvault.d.ts +22 -0
  294. package/dist/plugins/credvault.d.ts.map +1 -0
  295. package/dist/plugins/credvault.js +374 -0
  296. package/dist/plugins/credvault.js.map +1 -0
  297. package/dist/plugins/signcrypt.d.ts +27 -0
  298. package/dist/plugins/signcrypt.d.ts.map +1 -0
  299. package/dist/plugins/signcrypt.js +317 -0
  300. package/dist/plugins/signcrypt.js.map +1 -0
  301. package/dist/plugins/skillguard.d.ts +25 -0
  302. package/dist/plugins/skillguard.d.ts.map +1 -0
  303. package/dist/plugins/skillguard.js +346 -0
  304. package/dist/plugins/skillguard.js.map +1 -0
  305. package/dist/registry/client.d.ts +125 -0
  306. package/dist/registry/client.d.ts.map +1 -0
  307. package/dist/registry/client.js +308 -0
  308. package/dist/registry/client.js.map +1 -0
  309. package/dist/registry/contribution.d.ts +178 -0
  310. package/dist/registry/contribution.d.ts.map +1 -0
  311. package/dist/registry/contribution.js +272 -0
  312. package/dist/registry/contribution.js.map +1 -0
  313. package/dist/registry/index.d.ts +3 -0
  314. package/dist/registry/index.d.ts.map +1 -0
  315. package/dist/registry/index.js +10 -0
  316. package/dist/registry/index.js.map +1 -0
  317. package/dist/scanner/external-scanner.d.ts +13 -0
  318. package/dist/scanner/external-scanner.d.ts.map +1 -0
  319. package/dist/scanner/external-scanner.js +299 -0
  320. package/dist/scanner/external-scanner.js.map +1 -0
  321. package/dist/scanner/index.d.ts +6 -0
  322. package/dist/scanner/index.d.ts.map +1 -0
  323. package/dist/scanner/index.js +9 -0
  324. package/dist/scanner/index.js.map +1 -0
  325. package/dist/scanner/types.d.ts +32 -0
  326. package/dist/scanner/types.d.ts.map +1 -0
  327. package/dist/scanner/types.js +6 -0
  328. package/dist/scanner/types.js.map +1 -0
  329. package/dist/semantic/deep-scan.d.ts +13 -0
  330. package/dist/semantic/deep-scan.d.ts.map +1 -0
  331. package/dist/semantic/deep-scan.js +63 -0
  332. package/dist/semantic/deep-scan.js.map +1 -0
  333. package/dist/semantic/index.d.ts +17 -0
  334. package/dist/semantic/index.d.ts.map +1 -0
  335. package/dist/semantic/index.js +39 -0
  336. package/dist/semantic/index.js.map +1 -0
  337. package/dist/semantic/integration/cost-estimator.d.ts +17 -0
  338. package/dist/semantic/integration/cost-estimator.d.ts.map +1 -0
  339. package/dist/semantic/integration/cost-estimator.js +54 -0
  340. package/dist/semantic/integration/cost-estimator.js.map +1 -0
  341. package/dist/semantic/integration/finding-adapter.d.ts +34 -0
  342. package/dist/semantic/integration/finding-adapter.d.ts.map +1 -0
  343. package/dist/semantic/integration/finding-adapter.js +41 -0
  344. package/dist/semantic/integration/finding-adapter.js.map +1 -0
  345. package/dist/semantic/integration/oasb-upgrader.d.ts +20 -0
  346. package/dist/semantic/integration/oasb-upgrader.d.ts.map +1 -0
  347. package/dist/semantic/integration/oasb-upgrader.js +47 -0
  348. package/dist/semantic/integration/oasb-upgrader.js.map +1 -0
  349. package/dist/semantic/llm/budget.d.ts +50 -0
  350. package/dist/semantic/llm/budget.d.ts.map +1 -0
  351. package/dist/semantic/llm/budget.js +139 -0
  352. package/dist/semantic/llm/budget.js.map +1 -0
  353. package/dist/semantic/llm/cache.d.ts +36 -0
  354. package/dist/semantic/llm/cache.d.ts.map +1 -0
  355. package/dist/semantic/llm/cache.js +103 -0
  356. package/dist/semantic/llm/cache.js.map +1 -0
  357. package/dist/semantic/llm/client.d.ts +49 -0
  358. package/dist/semantic/llm/client.d.ts.map +1 -0
  359. package/dist/semantic/llm/client.js +64 -0
  360. package/dist/semantic/llm/client.js.map +1 -0
  361. package/dist/semantic/llm/index.d.ts +33 -0
  362. package/dist/semantic/llm/index.d.ts.map +1 -0
  363. package/dist/semantic/llm/index.js +129 -0
  364. package/dist/semantic/llm/index.js.map +1 -0
  365. package/dist/semantic/llm/prompts.d.ts +30 -0
  366. package/dist/semantic/llm/prompts.d.ts.map +1 -0
  367. package/dist/semantic/llm/prompts.js +120 -0
  368. package/dist/semantic/llm/prompts.js.map +1 -0
  369. package/dist/semantic/structural/credential-context.d.ts +14 -0
  370. package/dist/semantic/structural/credential-context.d.ts.map +1 -0
  371. package/dist/semantic/structural/credential-context.js +295 -0
  372. package/dist/semantic/structural/credential-context.js.map +1 -0
  373. package/dist/semantic/structural/index.d.ts +28 -0
  374. package/dist/semantic/structural/index.d.ts.map +1 -0
  375. package/dist/semantic/structural/index.js +138 -0
  376. package/dist/semantic/structural/index.js.map +1 -0
  377. package/dist/semantic/structural/instruction.d.ts +19 -0
  378. package/dist/semantic/structural/instruction.d.ts.map +1 -0
  379. package/dist/semantic/structural/instruction.js +167 -0
  380. package/dist/semantic/structural/instruction.js.map +1 -0
  381. package/dist/semantic/structural/mcp-config.d.ts +22 -0
  382. package/dist/semantic/structural/mcp-config.d.ts.map +1 -0
  383. package/dist/semantic/structural/mcp-config.js +294 -0
  384. package/dist/semantic/structural/mcp-config.js.map +1 -0
  385. package/dist/semantic/structural/permission-model.d.ts +16 -0
  386. package/dist/semantic/structural/permission-model.d.ts.map +1 -0
  387. package/dist/semantic/structural/permission-model.js +121 -0
  388. package/dist/semantic/structural/permission-model.js.map +1 -0
  389. package/dist/semantic/types.d.ts +122 -0
  390. package/dist/semantic/types.d.ts.map +1 -0
  391. package/dist/semantic/types.js +10 -0
  392. package/dist/semantic/types.js.map +1 -0
  393. package/package.json +25 -14
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ /**
3
+ * Context-Aware Credential Detection (Layer 2)
4
+ *
5
+ * Catches credentials that regex misses by understanding structure:
6
+ * - URL passwords (postgres://admin:password123@host)
7
+ * - Generic tokens in config (key-name heuristics)
8
+ * - Short API keys below regex thresholds
9
+ * - Secrets in instruction files (CLAUDE.md, .cursorrules)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CredentialContextAnalyzer = void 0;
13
+ /** Key names that indicate a secret value */
14
+ const SECRET_KEY_PATTERN = /^(.*_)?(secret|token|key|password|passwd|credential|auth|apikey|api_key|access_key|private_key|client_secret|signing_key|encryption_key|master_key|jwt_secret|session_secret|db_password|database_password)(_.*)?$/i;
15
+ /** URL with embedded credentials: protocol://user:password@host
16
+ * Uses greedy .+ for password to handle @ chars in passwords.
17
+ * The greedy match backtracks to the last valid @hostname boundary. */
18
+ const URL_CREDENTIAL_PATTERN = /(?:postgres|postgresql|mysql|mongodb|redis|amqp|rabbitmq|ftp|sftp|https?):\/\/([^:]+):(.+)@([a-zA-Z0-9][-a-zA-Z0-9.]*(?::\d+)?(?:\/[^\s"',)]*)?)/gi;
19
+ /** Values that are NOT secrets (env var refs, booleans, paths, etc.) */
20
+ function isNonSecretValue(value) {
21
+ const trimmed = value.trim().replace(/^["']|["']$/g, '');
22
+ // Empty or whitespace
23
+ if (!trimmed || trimmed.length === 0)
24
+ return true;
25
+ // Env var reference
26
+ if (/^\$\{.*\}$/.test(trimmed) || /^\$[A-Z_]+$/.test(trimmed))
27
+ return true;
28
+ // Boolean
29
+ if (/^(true|false)$/i.test(trimmed))
30
+ return true;
31
+ // Pure number
32
+ if (/^\d+(\.\d+)?$/.test(trimmed))
33
+ return true;
34
+ // File path (starts with / or ./ or ~/)
35
+ if (/^[.~]?\//.test(trimmed) && !trimmed.includes('@'))
36
+ return true;
37
+ // URL without credentials
38
+ if (/^https?:\/\/[^:@]*$/.test(trimmed))
39
+ return true;
40
+ // Placeholder values
41
+ if (/^(xxx|your[-_]|change[-_]me|replace[-_]|TODO|FIXME|placeholder|example)/i.test(trimmed))
42
+ return true;
43
+ // Common non-secret config values
44
+ if (/^(localhost|127\.0\.0\.1|0\.0\.0\.0|none|null|undefined|default)$/i.test(trimmed))
45
+ return true;
46
+ return false;
47
+ }
48
+ /** Severity based on file location */
49
+ function severityForFile(filePath) {
50
+ const lower = filePath.toLowerCase();
51
+ // In LLM context window — exposed to AI provider, extractable via prompt injection
52
+ if (lower.endsWith('claude.md') ||
53
+ lower.endsWith('.cursorrules') ||
54
+ lower.endsWith('.windsurfrules') ||
55
+ lower.endsWith('.clinerules') ||
56
+ lower.includes('copilot-instructions')) {
57
+ return 'critical';
58
+ }
59
+ // MCP configs — tool config, often committed
60
+ if (lower.includes('mcp.json') ||
61
+ lower.includes('mcp.yaml')) {
62
+ return 'critical';
63
+ }
64
+ // .env files that might be committed
65
+ if (lower.includes('.env')) {
66
+ return 'high';
67
+ }
68
+ // Config files
69
+ return 'high';
70
+ }
71
+ /**
72
+ * Detect URL-embedded passwords
73
+ */
74
+ function detectUrlPasswords(file) {
75
+ const findings = [];
76
+ const lines = file.content.split('\n');
77
+ for (let i = 0; i < lines.length; i++) {
78
+ const line = lines[i];
79
+ URL_CREDENTIAL_PATTERN.lastIndex = 0;
80
+ let match;
81
+ while ((match = URL_CREDENTIAL_PATTERN.exec(line)) !== null) {
82
+ const password = match[2];
83
+ // Skip env var references in URLs
84
+ if (password.startsWith('${') || password.startsWith('$'))
85
+ continue;
86
+ // Skip very short passwords that might be ports
87
+ if (password.length < 3)
88
+ continue;
89
+ findings.push({
90
+ id: 'SEM-CRED-001',
91
+ title: 'Password embedded in URL',
92
+ description: `Database or service URL contains an inline password. The password is visible in plaintext in ${file.path}.`,
93
+ rationale: 'URL-embedded credentials are logged by proxies, shell history, and process listings. They bypass .env file protections and are easily leaked in stack traces.',
94
+ category: 'credential',
95
+ severity: severityForFile(file.path),
96
+ file: file.path,
97
+ line: i + 1,
98
+ recommendation: 'Move the password to an environment variable and reference it: postgresql://${DB_USER}:${DB_PASSWORD}@host/db',
99
+ layer: 2,
100
+ autoFixable: false,
101
+ });
102
+ }
103
+ }
104
+ return findings;
105
+ }
106
+ /**
107
+ * Detect generic tokens via key-name heuristics
108
+ */
109
+ function detectGenericTokens(file) {
110
+ const findings = [];
111
+ const lines = file.content.split('\n');
112
+ for (let i = 0; i < lines.length; i++) {
113
+ const line = lines[i];
114
+ // JSON key:value patterns
115
+ const jsonMatch = line.match(/"([^"]+)"\s*:\s*"([^"]+)"/);
116
+ if (jsonMatch) {
117
+ const [, key, value] = jsonMatch;
118
+ if (SECRET_KEY_PATTERN.test(key) && !isNonSecretValue(value)) {
119
+ // Ensure value looks like it could be a secret (min length, some entropy)
120
+ if (value.length >= 8 && !/^[a-z]+$/i.test(value)) {
121
+ findings.push({
122
+ id: 'SEM-CRED-002',
123
+ title: 'Hardcoded secret in config',
124
+ description: `Key "${key}" contains what appears to be a hardcoded secret value in ${file.path}.`,
125
+ rationale: 'Config files with hardcoded secrets are commonly committed to version control. The key name strongly indicates this value should be treated as a secret.',
126
+ category: 'credential',
127
+ severity: severityForFile(file.path),
128
+ file: file.path,
129
+ line: i + 1,
130
+ recommendation: `Move "${key}" value to an environment variable and reference it with \${${key.toUpperCase().replace(/[^A-Z0-9]/g, '_')}}`,
131
+ layer: 2,
132
+ autoFixable: false,
133
+ });
134
+ }
135
+ }
136
+ }
137
+ // YAML key: value patterns
138
+ const yamlMatch = line.match(/^(\s*)([a-zA-Z_][a-zA-Z0-9_-]*)\s*:\s*(.+)$/);
139
+ if (yamlMatch && !jsonMatch) {
140
+ const [, , key, rawValue] = yamlMatch;
141
+ const value = rawValue.trim().replace(/^["']|["']$/g, '');
142
+ if (SECRET_KEY_PATTERN.test(key) && !isNonSecretValue(value)) {
143
+ if (value.length >= 8 && !/^[a-z]+$/i.test(value)) {
144
+ findings.push({
145
+ id: 'SEM-CRED-002',
146
+ title: 'Hardcoded secret in config',
147
+ description: `Key "${key}" contains what appears to be a hardcoded secret value in ${file.path}.`,
148
+ rationale: 'Config files with hardcoded secrets are commonly committed to version control. The key name strongly indicates this value should be treated as a secret.',
149
+ category: 'credential',
150
+ severity: severityForFile(file.path),
151
+ file: file.path,
152
+ line: i + 1,
153
+ recommendation: `Move "${key}" value to an environment variable.`,
154
+ layer: 2,
155
+ autoFixable: false,
156
+ });
157
+ }
158
+ }
159
+ }
160
+ // .env KEY=VALUE patterns
161
+ const envMatch = line.match(/^([A-Z][A-Z0-9_]*)=(.+)$/);
162
+ if (envMatch) {
163
+ const [, key, rawValue] = envMatch;
164
+ const value = rawValue.trim().replace(/^["']|["']$/g, '');
165
+ if (SECRET_KEY_PATTERN.test(key) && !isNonSecretValue(value)) {
166
+ if (value.length >= 8 && !/^[a-z]+$/i.test(value)) {
167
+ findings.push({
168
+ id: 'SEM-CRED-002',
169
+ title: 'Hardcoded secret in config',
170
+ description: `Environment variable "${key}" contains a hardcoded secret value in ${file.path}.`,
171
+ rationale: '.env files with hardcoded secrets should be gitignored. If this file is committed, the secret is exposed in version control history.',
172
+ category: 'credential',
173
+ severity: severityForFile(file.path),
174
+ file: file.path,
175
+ line: i + 1,
176
+ recommendation: `Ensure ${file.path} is in .gitignore and rotate this credential.`,
177
+ layer: 2,
178
+ autoFixable: false,
179
+ });
180
+ }
181
+ }
182
+ }
183
+ }
184
+ return findings;
185
+ }
186
+ /**
187
+ * Detect credential-like strings in instruction files
188
+ * (CLAUDE.md, .cursorrules, copilot-instructions.md)
189
+ *
190
+ * These files are loaded into the LLM context window,
191
+ * so ANY credential here is critical severity.
192
+ */
193
+ function detectCredentialsInInstructions(file) {
194
+ if (file.type !== 'agent_instructions' &&
195
+ !file.path.toLowerCase().endsWith('claude.md') &&
196
+ !file.path.toLowerCase().endsWith('.cursorrules')) {
197
+ return [];
198
+ }
199
+ const findings = [];
200
+ const lines = file.content.split('\n');
201
+ // Patterns that look like API keys/tokens (broader than core scanner's regex)
202
+ const broadCredentialPatterns = [
203
+ { name: 'API key prefix', pattern: /(?:sk-|pk-|rk-|ak-)[a-zA-Z0-9_-]{16,}/g },
204
+ { name: 'Bearer token', pattern: /Bearer\s+[a-zA-Z0-9._-]{20,}/g },
205
+ { name: 'Generic long token', pattern: /(?:token|key|secret|password)\s*[=:]\s*['"]?([a-zA-Z0-9_-]{32,})['"]?/gi },
206
+ { name: 'Base64 credential', pattern: /(?:password|secret|token|key)\s*[=:]\s*['"]?([A-Za-z0-9+/]{40,}={0,2})['"]?/gi },
207
+ ];
208
+ for (let i = 0; i < lines.length; i++) {
209
+ const line = lines[i];
210
+ for (const { name, pattern } of broadCredentialPatterns) {
211
+ pattern.lastIndex = 0;
212
+ if (pattern.test(line)) {
213
+ findings.push({
214
+ id: 'SEM-CRED-003',
215
+ title: 'Credential in agent instructions',
216
+ description: `Detected ${name} pattern in ${file.path}. This file is loaded into the LLM context window.`,
217
+ rationale: 'Agent instruction files (CLAUDE.md, .cursorrules) are sent to the AI provider with every request. Any credential in these files is exposed to the AI provider and can be extracted via prompt injection attacks.',
218
+ category: 'credential',
219
+ severity: 'critical',
220
+ file: file.path,
221
+ line: i + 1,
222
+ recommendation: 'Remove all credentials from instruction files immediately. Use environment variables or a secrets manager instead.',
223
+ layer: 2,
224
+ autoFixable: false,
225
+ });
226
+ break; // One finding per line
227
+ }
228
+ }
229
+ }
230
+ return findings;
231
+ }
232
+ /**
233
+ * Detect secrets passed via MCP server env blocks
234
+ */
235
+ function detectMcpEnvSecrets(file) {
236
+ if (file.type !== 'mcp_config' && file.type !== 'claude_settings') {
237
+ return [];
238
+ }
239
+ const findings = [];
240
+ let config;
241
+ try {
242
+ config = JSON.parse(file.content);
243
+ }
244
+ catch {
245
+ return [];
246
+ }
247
+ const servers = config.mcpServers || {};
248
+ const lines = file.content.split('\n');
249
+ for (const [serverName, serverConfig] of Object.entries(servers)) {
250
+ if (!serverConfig.env)
251
+ continue;
252
+ for (const [key, value] of Object.entries(serverConfig.env)) {
253
+ if (typeof value !== 'string')
254
+ continue;
255
+ if (SECRET_KEY_PATTERN.test(key) && !isNonSecretValue(value)) {
256
+ // Find the line number
257
+ let lineNum;
258
+ for (let i = 0; i < lines.length; i++) {
259
+ if (lines[i].includes(`"${key}"`) && lines[i].includes(value.substring(0, 20))) {
260
+ lineNum = i + 1;
261
+ break;
262
+ }
263
+ }
264
+ findings.push({
265
+ id: 'SEM-CRED-004',
266
+ title: 'Secret hardcoded in MCP server config',
267
+ description: `MCP server "${serverName}" has secret "${key}" hardcoded in env block of ${file.path}.`,
268
+ rationale: 'MCP config files are typically committed to version control. Secrets in the env block are visible in plaintext. Use environment variable references instead.',
269
+ category: 'credential',
270
+ severity: 'critical',
271
+ file: file.path,
272
+ line: lineNum,
273
+ recommendation: `Replace the hardcoded value with an env var reference: "${key}": "\${${key}}"`,
274
+ layer: 2,
275
+ autoFixable: false,
276
+ });
277
+ }
278
+ }
279
+ }
280
+ return findings;
281
+ }
282
+ class CredentialContextAnalyzer {
283
+ analyze(files) {
284
+ const findings = [];
285
+ for (const file of files) {
286
+ findings.push(...detectUrlPasswords(file));
287
+ findings.push(...detectGenericTokens(file));
288
+ findings.push(...detectCredentialsInInstructions(file));
289
+ findings.push(...detectMcpEnvSecrets(file));
290
+ }
291
+ return findings;
292
+ }
293
+ }
294
+ exports.CredentialContextAnalyzer = CredentialContextAnalyzer;
295
+ //# sourceMappingURL=credential-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-context.js","sourceRoot":"","sources":["../../../src/semantic/structural/credential-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Structural Analyzer (Layer 2 Orchestrator)
3
+ *
4
+ * Runs all Layer 2 analyzers against a target directory.
5
+ * Discovers security-relevant files, classifies them, reads content,
6
+ * and runs each analyzer.
7
+ */
8
+ import type { SemanticFinding, AnalysisFile } from '../types';
9
+ export declare class StructuralAnalyzer {
10
+ private credentialAnalyzer;
11
+ private mcpAnalyzer;
12
+ private instructionAnalyzer;
13
+ private permissionAnalyzer;
14
+ /**
15
+ * Discover and analyze all security-relevant files in the target directory.
16
+ */
17
+ analyze(targetDir: string): Promise<SemanticFinding[]>;
18
+ /**
19
+ * Discover and read security-relevant files.
20
+ * Exported for use by the MCP server's deep_scan tool.
21
+ */
22
+ discoverFiles(targetDir: string): Promise<AnalysisFile[]>;
23
+ }
24
+ export { CredentialContextAnalyzer } from './credential-context';
25
+ export { McpConfigAnalyzer } from './mcp-config';
26
+ export { InstructionAnalyzer } from './instruction';
27
+ export { PermissionModelAnalyzer } from './permission-model';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/semantic/structural/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAuCxE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,kBAAkB,CAAiC;IAE3D;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAc5D;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CA6BhE;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * Structural Analyzer (Layer 2 Orchestrator)
4
+ *
5
+ * Runs all Layer 2 analyzers against a target directory.
6
+ * Discovers security-relevant files, classifies them, reads content,
7
+ * and runs each analyzer.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.PermissionModelAnalyzer = exports.InstructionAnalyzer = exports.McpConfigAnalyzer = exports.CredentialContextAnalyzer = exports.StructuralAnalyzer = void 0;
44
+ const fs = __importStar(require("fs/promises"));
45
+ const path = __importStar(require("path"));
46
+ const credential_context_1 = require("./credential-context");
47
+ const mcp_config_1 = require("./mcp-config");
48
+ const instruction_1 = require("./instruction");
49
+ const permission_model_1 = require("./permission-model");
50
+ /** Max file size to read (prevents OOM on huge files) */
51
+ const MAX_FILE_SIZE = 512 * 1024; // 512KB
52
+ /** Security-relevant files to look for */
53
+ const FILE_DISCOVERY = [
54
+ // Agent instruction files
55
+ { glob: 'CLAUDE.md', type: 'agent_instructions' },
56
+ { glob: '.cursorrules', type: 'agent_instructions' },
57
+ { glob: '.windsurfrules', type: 'agent_instructions' },
58
+ { glob: '.clinerules', type: 'agent_instructions' },
59
+ { glob: '.github/copilot-instructions.md', type: 'agent_instructions' },
60
+ // MCP config files
61
+ { glob: 'mcp.json', type: 'mcp_config' },
62
+ { glob: '.cursor/mcp.json', type: 'mcp_config' },
63
+ { glob: '.vscode/mcp.json', type: 'mcp_config' },
64
+ // Claude settings
65
+ { glob: '.claude/settings.json', type: 'claude_settings' },
66
+ // Env files
67
+ { glob: '.env', type: 'env_file' },
68
+ { glob: '.env.local', type: 'env_file' },
69
+ { glob: '.env.development', type: 'env_file' },
70
+ { glob: '.env.production', type: 'env_file' },
71
+ // Config files
72
+ { glob: 'config.json', type: 'config_file' },
73
+ { glob: 'config.yaml', type: 'config_file' },
74
+ { glob: 'config.yml', type: 'config_file' },
75
+ { glob: 'settings.json', type: 'config_file' },
76
+ ];
77
+ class StructuralAnalyzer {
78
+ constructor() {
79
+ this.credentialAnalyzer = new credential_context_1.CredentialContextAnalyzer();
80
+ this.mcpAnalyzer = new mcp_config_1.McpConfigAnalyzer();
81
+ this.instructionAnalyzer = new instruction_1.InstructionAnalyzer();
82
+ this.permissionAnalyzer = new permission_model_1.PermissionModelAnalyzer();
83
+ }
84
+ /**
85
+ * Discover and analyze all security-relevant files in the target directory.
86
+ */
87
+ async analyze(targetDir) {
88
+ const files = await this.discoverFiles(targetDir);
89
+ if (files.length === 0)
90
+ return [];
91
+ const findings = [];
92
+ findings.push(...this.credentialAnalyzer.analyze(files));
93
+ findings.push(...this.mcpAnalyzer.analyze(files));
94
+ findings.push(...this.instructionAnalyzer.analyze(files));
95
+ findings.push(...this.permissionAnalyzer.analyze(files));
96
+ return findings;
97
+ }
98
+ /**
99
+ * Discover and read security-relevant files.
100
+ * Exported for use by the MCP server's deep_scan tool.
101
+ */
102
+ async discoverFiles(targetDir) {
103
+ const files = [];
104
+ for (const { glob, type } of FILE_DISCOVERY) {
105
+ const filePath = path.join(targetDir, glob);
106
+ try {
107
+ const stat = await fs.stat(filePath);
108
+ if (!stat.isFile())
109
+ continue;
110
+ const truncated = stat.size > MAX_FILE_SIZE;
111
+ const content = await fs.readFile(filePath, 'utf-8');
112
+ const finalContent = truncated
113
+ ? content.substring(0, MAX_FILE_SIZE)
114
+ : content;
115
+ files.push({
116
+ path: glob,
117
+ type,
118
+ content: finalContent,
119
+ truncated,
120
+ });
121
+ }
122
+ catch {
123
+ // File doesn't exist — skip
124
+ }
125
+ }
126
+ return files;
127
+ }
128
+ }
129
+ exports.StructuralAnalyzer = StructuralAnalyzer;
130
+ var credential_context_2 = require("./credential-context");
131
+ Object.defineProperty(exports, "CredentialContextAnalyzer", { enumerable: true, get: function () { return credential_context_2.CredentialContextAnalyzer; } });
132
+ var mcp_config_2 = require("./mcp-config");
133
+ Object.defineProperty(exports, "McpConfigAnalyzer", { enumerable: true, get: function () { return mcp_config_2.McpConfigAnalyzer; } });
134
+ var instruction_2 = require("./instruction");
135
+ Object.defineProperty(exports, "InstructionAnalyzer", { enumerable: true, get: function () { return instruction_2.InstructionAnalyzer; } });
136
+ var permission_model_2 = require("./permission-model");
137
+ Object.defineProperty(exports, "PermissionModelAnalyzer", { enumerable: true, get: function () { return permission_model_2.PermissionModelAnalyzer; } });
138
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/semantic/structural/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Agent Instruction Static Analysis (Layer 2)
3
+ *
4
+ * Analyzes CLAUDE.md, .cursorrules, .windsurfrules, .clinerules,
5
+ * copilot-instructions.md for security issues:
6
+ * - Overly permissive instructions
7
+ * - Exfiltration enablement
8
+ * - Missing security boundaries
9
+ * - Large attack surface
10
+ */
11
+ import type { SemanticFinding, AnalysisFile } from '../types';
12
+ export declare class InstructionAnalyzer {
13
+ analyze(files: AnalysisFile[]): SemanticFinding[];
14
+ private checkPermissiveInstructions;
15
+ private checkExfiltrationEnablement;
16
+ private checkMissingSecurityBoundaries;
17
+ private checkLargeAttackSurface;
18
+ }
19
+ //# sourceMappingURL=instruction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../src/semantic/structural/instruction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAiD9D,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE;IAiBjD,OAAO,CAAC,2BAA2B;IAgCnC,OAAO,CAAC,2BAA2B;IAgCnC,OAAO,CAAC,8BAA8B;IA8BtC,OAAO,CAAC,uBAAuB;CAyBhC"}