lean-claudient-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/.reports/detailed-analysis_2026-06-20_01ed326b.html +200 -0
  2. package/.reports/detailed-analysis_2026-06-20_08d39381.html +200 -0
  3. package/.reports/detailed-analysis_2026-06-20_0a331144.html +200 -0
  4. package/.reports/detailed-analysis_2026-06-20_0d54ffef.html +200 -0
  5. package/.reports/detailed-analysis_2026-06-20_14bfa31c.html +200 -0
  6. package/.reports/detailed-analysis_2026-06-20_211feac4.html +200 -0
  7. package/.reports/detailed-analysis_2026-06-20_22381bc2.html +200 -0
  8. package/.reports/detailed-analysis_2026-06-20_29b4ea0a.html +200 -0
  9. package/.reports/detailed-analysis_2026-06-20_2df0ad14.html +200 -0
  10. package/.reports/detailed-analysis_2026-06-20_343ec84c.html +200 -0
  11. package/.reports/detailed-analysis_2026-06-20_3a01030d.html +200 -0
  12. package/.reports/detailed-analysis_2026-06-20_3b4c99ec.html +200 -0
  13. package/.reports/detailed-analysis_2026-06-20_3d368827.html +200 -0
  14. package/.reports/detailed-analysis_2026-06-20_53544d3d.html +200 -0
  15. package/.reports/detailed-analysis_2026-06-20_5721164a.html +200 -0
  16. package/.reports/detailed-analysis_2026-06-20_57caf5e7.html +200 -0
  17. package/.reports/detailed-analysis_2026-06-20_624302f5.html +200 -0
  18. package/.reports/detailed-analysis_2026-06-20_62456384.html +200 -0
  19. package/.reports/detailed-analysis_2026-06-20_636a52f1.html +200 -0
  20. package/.reports/detailed-analysis_2026-06-20_63d1ad41.html +200 -0
  21. package/.reports/detailed-analysis_2026-06-20_7451ccd7.html +200 -0
  22. package/.reports/detailed-analysis_2026-06-20_74da4e9a.html +200 -0
  23. package/.reports/detailed-analysis_2026-06-20_83a90083.html +200 -0
  24. package/.reports/detailed-analysis_2026-06-20_867fbdd9.html +200 -0
  25. package/.reports/detailed-analysis_2026-06-20_974c3299.html +200 -0
  26. package/.reports/detailed-analysis_2026-06-20_a04639a2.html +200 -0
  27. package/.reports/detailed-analysis_2026-06-20_a8e23d6d.html +200 -0
  28. package/.reports/detailed-analysis_2026-06-20_aa9150f0.html +200 -0
  29. package/.reports/detailed-analysis_2026-06-20_acbeee08.html +200 -0
  30. package/.reports/detailed-analysis_2026-06-20_c4ffa0e2.html +200 -0
  31. package/.reports/detailed-analysis_2026-06-20_c5f7684b.html +200 -0
  32. package/.reports/detailed-analysis_2026-06-20_c963b1fa.html +200 -0
  33. package/.reports/detailed-analysis_2026-06-20_d4bde41f.html +200 -0
  34. package/.reports/detailed-analysis_2026-06-20_d6eb2497.html +200 -0
  35. package/.reports/detailed-analysis_2026-06-20_ea6f7f58.html +200 -0
  36. package/.reports/detailed-analysis_2026-06-20_ebf4e060.html +200 -0
  37. package/.reports/detailed-analysis_2026-06-20_ec4313a9.html +200 -0
  38. package/.reports/detailed-analysis_2026-06-20_fc65d18e.html +200 -0
  39. package/.reports/executive-summary_2026-06-20_00406d50.html +109 -0
  40. package/.reports/executive-summary_2026-06-20_0bb202d3.html +109 -0
  41. package/.reports/executive-summary_2026-06-20_0bcd7481.html +109 -0
  42. package/.reports/executive-summary_2026-06-20_11506445.html +109 -0
  43. package/.reports/executive-summary_2026-06-20_13616cda.html +109 -0
  44. package/.reports/executive-summary_2026-06-20_19d41c2f.html +109 -0
  45. package/.reports/executive-summary_2026-06-20_1b0d6e96.html +109 -0
  46. package/.reports/executive-summary_2026-06-20_1e38670b.html +109 -0
  47. package/.reports/executive-summary_2026-06-20_1f32f793.html +109 -0
  48. package/.reports/executive-summary_2026-06-20_1f40f7d3.html +109 -0
  49. package/.reports/executive-summary_2026-06-20_25a40a7e.html +109 -0
  50. package/.reports/executive-summary_2026-06-20_26d11818.html +109 -0
  51. package/.reports/executive-summary_2026-06-20_26ed4593.html +109 -0
  52. package/.reports/executive-summary_2026-06-20_291b90a8.html +109 -0
  53. package/.reports/executive-summary_2026-06-20_2957a848.html +109 -0
  54. package/.reports/executive-summary_2026-06-20_2a04eb77.html +109 -0
  55. package/.reports/executive-summary_2026-06-20_2fa701f9.html +109 -0
  56. package/.reports/executive-summary_2026-06-20_327af8f5.html +109 -0
  57. package/.reports/executive-summary_2026-06-20_3418c729.html +109 -0
  58. package/.reports/executive-summary_2026-06-20_3571763d.html +109 -0
  59. package/.reports/executive-summary_2026-06-20_36225353.html +109 -0
  60. package/.reports/executive-summary_2026-06-20_3b2de891.html +109 -0
  61. package/.reports/executive-summary_2026-06-20_45b980c2.html +109 -0
  62. package/.reports/executive-summary_2026-06-20_46fcbf17.html +109 -0
  63. package/.reports/executive-summary_2026-06-20_48c8fa5e.html +109 -0
  64. package/.reports/executive-summary_2026-06-20_4ba55c43.html +109 -0
  65. package/.reports/executive-summary_2026-06-20_4f4498e6.html +109 -0
  66. package/.reports/executive-summary_2026-06-20_54c33bf0.html +109 -0
  67. package/.reports/executive-summary_2026-06-20_54cc7077.html +109 -0
  68. package/.reports/executive-summary_2026-06-20_5a12912e.html +109 -0
  69. package/.reports/executive-summary_2026-06-20_636fac87.html +109 -0
  70. package/.reports/executive-summary_2026-06-20_6587faaf.html +109 -0
  71. package/.reports/executive-summary_2026-06-20_6adbdd03.html +109 -0
  72. package/.reports/executive-summary_2026-06-20_6bf344ec.html +109 -0
  73. package/.reports/executive-summary_2026-06-20_7142aeed.html +109 -0
  74. package/.reports/executive-summary_2026-06-20_72bc0ceb.html +109 -0
  75. package/.reports/executive-summary_2026-06-20_775752ac.html +109 -0
  76. package/.reports/executive-summary_2026-06-20_7a9c3223.html +109 -0
  77. package/.reports/executive-summary_2026-06-20_808e6376.html +109 -0
  78. package/.reports/executive-summary_2026-06-20_8de9142d.html +109 -0
  79. package/.reports/executive-summary_2026-06-20_91981fbe.html +109 -0
  80. package/.reports/executive-summary_2026-06-20_93191c8c.html +109 -0
  81. package/.reports/executive-summary_2026-06-20_9be48a87.html +109 -0
  82. package/.reports/executive-summary_2026-06-20_9c127198.html +109 -0
  83. package/.reports/executive-summary_2026-06-20_9ee303ac.html +109 -0
  84. package/.reports/executive-summary_2026-06-20_9ee52709.html +109 -0
  85. package/.reports/executive-summary_2026-06-20_a0fa27de.html +109 -0
  86. package/.reports/executive-summary_2026-06-20_a1813e47.html +109 -0
  87. package/.reports/executive-summary_2026-06-20_a974edc1.html +109 -0
  88. package/.reports/executive-summary_2026-06-20_aa711737.html +109 -0
  89. package/.reports/executive-summary_2026-06-20_aa752246.html +109 -0
  90. package/.reports/executive-summary_2026-06-20_ac6f0927.html +109 -0
  91. package/.reports/executive-summary_2026-06-20_b231b143.html +109 -0
  92. package/.reports/executive-summary_2026-06-20_b570a2bd.html +109 -0
  93. package/.reports/executive-summary_2026-06-20_b6fbf650.html +109 -0
  94. package/.reports/executive-summary_2026-06-20_b9f8ddf3.html +109 -0
  95. package/.reports/executive-summary_2026-06-20_bf95cc63.html +109 -0
  96. package/.reports/executive-summary_2026-06-20_c0d0aefe.html +109 -0
  97. package/.reports/executive-summary_2026-06-20_c1933c36.html +109 -0
  98. package/.reports/executive-summary_2026-06-20_c99bba8a.html +109 -0
  99. package/.reports/executive-summary_2026-06-20_cc3846ac.html +109 -0
  100. package/.reports/executive-summary_2026-06-20_d485993c.html +109 -0
  101. package/.reports/executive-summary_2026-06-20_d56f75f7.html +109 -0
  102. package/.reports/executive-summary_2026-06-20_d57660cc.html +109 -0
  103. package/.reports/executive-summary_2026-06-20_dc036f62.html +109 -0
  104. package/.reports/executive-summary_2026-06-20_df783f47.html +109 -0
  105. package/.reports/executive-summary_2026-06-20_e2191adb.html +109 -0
  106. package/.reports/executive-summary_2026-06-20_e9f1d504.html +109 -0
  107. package/.reports/executive-summary_2026-06-20_ea82f5e1.html +109 -0
  108. package/.reports/executive-summary_2026-06-20_ec3e70cb.html +109 -0
  109. package/.reports/executive-summary_2026-06-20_ee6cf902.html +109 -0
  110. package/.reports/executive-summary_2026-06-20_f6cb657c.html +109 -0
  111. package/.reports/executive-summary_2026-06-20_f8c60046.html +109 -0
  112. package/.reports/executive-summary_2026-06-20_fa184840.html +109 -0
  113. package/.reports/executive-summary_2026-06-20_fc88bcb4.html +109 -0
  114. package/.reports/executive-summary_2026-06-20_ffa79c4e.html +109 -0
  115. package/README.md +53 -0
  116. package/dist/automation/actionApprover.d.ts +89 -0
  117. package/dist/automation/actionApprover.d.ts.map +1 -0
  118. package/dist/automation/actionApprover.js +264 -0
  119. package/dist/automation/actionApprover.js.map +1 -0
  120. package/dist/automation/actionExecutor.d.ts +125 -0
  121. package/dist/automation/actionExecutor.d.ts.map +1 -0
  122. package/dist/automation/actionExecutor.js +304 -0
  123. package/dist/automation/actionExecutor.js.map +1 -0
  124. package/dist/automation/alertRules.d.ts +55 -0
  125. package/dist/automation/alertRules.d.ts.map +1 -0
  126. package/dist/automation/alertRules.js +70 -0
  127. package/dist/automation/alertRules.js.map +1 -0
  128. package/dist/automation/alertSystem.d.ts +109 -0
  129. package/dist/automation/alertSystem.d.ts.map +1 -0
  130. package/dist/automation/alertSystem.js +303 -0
  131. package/dist/automation/alertSystem.js.map +1 -0
  132. package/dist/automation/competitorResponse.d.ts +119 -0
  133. package/dist/automation/competitorResponse.d.ts.map +1 -0
  134. package/dist/automation/competitorResponse.js +343 -0
  135. package/dist/automation/competitorResponse.js.map +1 -0
  136. package/dist/automation/composioClient.d.ts +107 -0
  137. package/dist/automation/composioClient.d.ts.map +1 -0
  138. package/dist/automation/composioClient.js +286 -0
  139. package/dist/automation/composioClient.js.map +1 -0
  140. package/dist/automation/crmExport.d.ts +116 -0
  141. package/dist/automation/crmExport.d.ts.map +1 -0
  142. package/dist/automation/crmExport.js +282 -0
  143. package/dist/automation/crmExport.js.map +1 -0
  144. package/dist/automation/crmIntegration.d.ts +83 -0
  145. package/dist/automation/crmIntegration.d.ts.map +1 -0
  146. package/dist/automation/crmIntegration.js +207 -0
  147. package/dist/automation/crmIntegration.js.map +1 -0
  148. package/dist/automation/gmailIntegration.d.ts +73 -0
  149. package/dist/automation/gmailIntegration.d.ts.map +1 -0
  150. package/dist/automation/gmailIntegration.js +184 -0
  151. package/dist/automation/gmailIntegration.js.map +1 -0
  152. package/dist/automation/index.d.ts +17 -0
  153. package/dist/automation/index.d.ts.map +1 -0
  154. package/dist/automation/index.js +17 -0
  155. package/dist/automation/index.js.map +1 -0
  156. package/dist/automation/jiraIntegration.d.ts +103 -0
  157. package/dist/automation/jiraIntegration.d.ts.map +1 -0
  158. package/dist/automation/jiraIntegration.js +222 -0
  159. package/dist/automation/jiraIntegration.js.map +1 -0
  160. package/dist/automation/jobQueue.d.ts +98 -0
  161. package/dist/automation/jobQueue.d.ts.map +1 -0
  162. package/dist/automation/jobQueue.js +207 -0
  163. package/dist/automation/jobQueue.js.map +1 -0
  164. package/dist/automation/leadQualification.d.ts +60 -0
  165. package/dist/automation/leadQualification.d.ts.map +1 -0
  166. package/dist/automation/leadQualification.js +204 -0
  167. package/dist/automation/leadQualification.js.map +1 -0
  168. package/dist/automation/qualificationRules.d.ts +100 -0
  169. package/dist/automation/qualificationRules.d.ts.map +1 -0
  170. package/dist/automation/qualificationRules.js +202 -0
  171. package/dist/automation/qualificationRules.js.map +1 -0
  172. package/dist/automation/responseTemplates.d.ts +64 -0
  173. package/dist/automation/responseTemplates.d.ts.map +1 -0
  174. package/dist/automation/responseTemplates.js +374 -0
  175. package/dist/automation/responseTemplates.js.map +1 -0
  176. package/dist/automation/scheduler.d.ts +85 -0
  177. package/dist/automation/scheduler.d.ts.map +1 -0
  178. package/dist/automation/scheduler.js +194 -0
  179. package/dist/automation/scheduler.js.map +1 -0
  180. package/dist/automation/types.d.ts +223 -0
  181. package/dist/automation/types.d.ts.map +1 -0
  182. package/dist/automation/types.js +32 -0
  183. package/dist/automation/types.js.map +1 -0
  184. package/dist/cli/index.d.ts +3 -0
  185. package/dist/cli/index.d.ts.map +1 -0
  186. package/dist/cli/index.js +575 -0
  187. package/dist/cli/index.js.map +1 -0
  188. package/dist/compression/caveman.d.ts +14 -0
  189. package/dist/compression/caveman.d.ts.map +1 -0
  190. package/dist/compression/caveman.js +188 -0
  191. package/dist/compression/caveman.js.map +1 -0
  192. package/dist/compression/caveman.test.d.ts +2 -0
  193. package/dist/compression/caveman.test.d.ts.map +1 -0
  194. package/dist/compression/caveman.test.js.map +1 -0
  195. package/dist/config/configManager.d.ts +6 -0
  196. package/dist/config/configManager.d.ts.map +1 -0
  197. package/dist/config/configManager.js +62 -0
  198. package/dist/config/configManager.js.map +1 -0
  199. package/dist/config/schema.d.ts +95 -0
  200. package/dist/config/schema.d.ts.map +1 -0
  201. package/dist/config/schema.js +19 -0
  202. package/dist/config/schema.js.map +1 -0
  203. package/dist/context/autoCompact.d.ts +19 -0
  204. package/dist/context/autoCompact.d.ts.map +1 -0
  205. package/dist/context/autoCompact.js +101 -0
  206. package/dist/context/autoCompact.js.map +1 -0
  207. package/dist/context/readDedup.d.ts +21 -0
  208. package/dist/context/readDedup.d.ts.map +1 -0
  209. package/dist/context/readDedup.js +55 -0
  210. package/dist/context/readDedup.js.map +1 -0
  211. package/dist/context/toolBudgets.d.ts +15 -0
  212. package/dist/context/toolBudgets.d.ts.map +1 -0
  213. package/dist/context/toolBudgets.js +35 -0
  214. package/dist/context/toolBudgets.js.map +1 -0
  215. package/dist/core/auditLogger.d.ts +30 -0
  216. package/dist/core/auditLogger.d.ts.map +1 -0
  217. package/dist/core/auditLogger.js +51 -0
  218. package/dist/core/auditLogger.js.map +1 -0
  219. package/dist/core/stateManager.d.ts +10 -0
  220. package/dist/core/stateManager.d.ts.map +1 -0
  221. package/dist/core/stateManager.js +59 -0
  222. package/dist/core/stateManager.js.map +1 -0
  223. package/dist/database/feedbackSchema.d.ts +80 -0
  224. package/dist/database/feedbackSchema.d.ts.map +1 -0
  225. package/dist/database/feedbackSchema.js +94 -0
  226. package/dist/database/feedbackSchema.js.map +1 -0
  227. package/dist/database/leadsSchema.d.ts +99 -0
  228. package/dist/database/leadsSchema.d.ts.map +1 -0
  229. package/dist/database/leadsSchema.js +136 -0
  230. package/dist/database/leadsSchema.js.map +1 -0
  231. package/dist/intelligence/competitorScoring.d.ts +25 -0
  232. package/dist/intelligence/competitorScoring.d.ts.map +1 -0
  233. package/dist/intelligence/competitorScoring.js +181 -0
  234. package/dist/intelligence/competitorScoring.js.map +1 -0
  235. package/dist/intelligence/competitorTracker.d.ts +36 -0
  236. package/dist/intelligence/competitorTracker.d.ts.map +1 -0
  237. package/dist/intelligence/competitorTracker.js +286 -0
  238. package/dist/intelligence/competitorTracker.js.map +1 -0
  239. package/dist/intelligence/competitorTypes.d.ts +93 -0
  240. package/dist/intelligence/competitorTypes.d.ts.map +1 -0
  241. package/dist/intelligence/competitorTypes.js +6 -0
  242. package/dist/intelligence/competitorTypes.js.map +1 -0
  243. package/dist/intelligence/competitors.json +76 -0
  244. package/dist/intelligence/feedbackLoop.d.ts +118 -0
  245. package/dist/intelligence/feedbackLoop.d.ts.map +1 -0
  246. package/dist/intelligence/feedbackLoop.js +368 -0
  247. package/dist/intelligence/feedbackLoop.js.map +1 -0
  248. package/dist/intelligence/gitHubTracker.d.ts +14 -0
  249. package/dist/intelligence/gitHubTracker.d.ts.map +1 -0
  250. package/dist/intelligence/gitHubTracker.js +153 -0
  251. package/dist/intelligence/gitHubTracker.js.map +1 -0
  252. package/dist/intelligence/hackerNewsScanner.d.ts +21 -0
  253. package/dist/intelligence/hackerNewsScanner.d.ts.map +1 -0
  254. package/dist/intelligence/hackerNewsScanner.js +88 -0
  255. package/dist/intelligence/hackerNewsScanner.js.map +1 -0
  256. package/dist/intelligence/hiringSignals.d.ts +16 -0
  257. package/dist/intelligence/hiringSignals.d.ts.map +1 -0
  258. package/dist/intelligence/hiringSignals.js +132 -0
  259. package/dist/intelligence/hiringSignals.js.map +1 -0
  260. package/dist/intelligence/index.d.ts +9 -0
  261. package/dist/intelligence/index.d.ts.map +1 -0
  262. package/dist/intelligence/index.js +9 -0
  263. package/dist/intelligence/index.js.map +1 -0
  264. package/dist/intelligence/leadEnrichment.d.ts +59 -0
  265. package/dist/intelligence/leadEnrichment.d.ts.map +1 -0
  266. package/dist/intelligence/leadEnrichment.js +209 -0
  267. package/dist/intelligence/leadEnrichment.js.map +1 -0
  268. package/dist/intelligence/leadEnrichmentTypes.d.ts +49 -0
  269. package/dist/intelligence/leadEnrichmentTypes.d.ts.map +1 -0
  270. package/dist/intelligence/leadEnrichmentTypes.js +7 -0
  271. package/dist/intelligence/leadEnrichmentTypes.js.map +1 -0
  272. package/dist/intelligence/marketScanner.d.ts +18 -0
  273. package/dist/intelligence/marketScanner.d.ts.map +1 -0
  274. package/dist/intelligence/marketScanner.js +225 -0
  275. package/dist/intelligence/marketScanner.js.map +1 -0
  276. package/dist/intelligence/polymarketScanner.d.ts +20 -0
  277. package/dist/intelligence/polymarketScanner.d.ts.map +1 -0
  278. package/dist/intelligence/polymarketScanner.js +88 -0
  279. package/dist/intelligence/polymarketScanner.js.map +1 -0
  280. package/dist/intelligence/redditScanner.d.ts +22 -0
  281. package/dist/intelligence/redditScanner.d.ts.map +1 -0
  282. package/dist/intelligence/redditScanner.js +89 -0
  283. package/dist/intelligence/redditScanner.js.map +1 -0
  284. package/dist/intelligence/signalAggregator.d.ts +10 -0
  285. package/dist/intelligence/signalAggregator.d.ts.map +1 -0
  286. package/dist/intelligence/signalAggregator.js +64 -0
  287. package/dist/intelligence/signalAggregator.js.map +1 -0
  288. package/dist/intelligence/trendAnalysis.d.ts +13 -0
  289. package/dist/intelligence/trendAnalysis.d.ts.map +1 -0
  290. package/dist/intelligence/trendAnalysis.js +106 -0
  291. package/dist/intelligence/trendAnalysis.js.map +1 -0
  292. package/dist/intelligence/twitterScanner.d.ts +22 -0
  293. package/dist/intelligence/twitterScanner.d.ts.map +1 -0
  294. package/dist/intelligence/twitterScanner.js +63 -0
  295. package/dist/intelligence/twitterScanner.js.map +1 -0
  296. package/dist/intelligence/types.d.ts +566 -0
  297. package/dist/intelligence/types.d.ts.map +1 -0
  298. package/dist/intelligence/types.js +87 -0
  299. package/dist/intelligence/types.js.map +1 -0
  300. package/dist/intelligence/userComplaints.d.ts +15 -0
  301. package/dist/intelligence/userComplaints.d.ts.map +1 -0
  302. package/dist/intelligence/userComplaints.js +193 -0
  303. package/dist/intelligence/userComplaints.js.map +1 -0
  304. package/dist/metrics/businessMetrics.d.ts +41 -0
  305. package/dist/metrics/businessMetrics.d.ts.map +1 -0
  306. package/dist/metrics/businessMetrics.js +120 -0
  307. package/dist/metrics/businessMetrics.js.map +1 -0
  308. package/dist/metrics/businessMetrics.test.d.ts +2 -0
  309. package/dist/metrics/businessMetrics.test.d.ts.map +1 -0
  310. package/dist/metrics/businessMetrics.test.js.map +1 -0
  311. package/dist/metrics/businessMetricsAgg.d.ts +85 -0
  312. package/dist/metrics/businessMetricsAgg.d.ts.map +1 -0
  313. package/dist/metrics/businessMetricsAgg.js +406 -0
  314. package/dist/metrics/businessMetricsAgg.js.map +1 -0
  315. package/dist/metrics/competitorMetrics.d.ts +57 -0
  316. package/dist/metrics/competitorMetrics.d.ts.map +1 -0
  317. package/dist/metrics/competitorMetrics.js +94 -0
  318. package/dist/metrics/competitorMetrics.js.map +1 -0
  319. package/dist/metrics/dashboardGenerator.d.ts +16 -0
  320. package/dist/metrics/dashboardGenerator.d.ts.map +1 -0
  321. package/dist/metrics/dashboardGenerator.js +313 -0
  322. package/dist/metrics/dashboardGenerator.js.map +1 -0
  323. package/dist/metrics/dashboardHTML.d.ts +18 -0
  324. package/dist/metrics/dashboardHTML.d.ts.map +1 -0
  325. package/dist/metrics/dashboardHTML.js +613 -0
  326. package/dist/metrics/dashboardHTML.js.map +1 -0
  327. package/dist/metrics/grafanaExport.d.ts +53 -0
  328. package/dist/metrics/grafanaExport.d.ts.map +1 -0
  329. package/dist/metrics/grafanaExport.js +277 -0
  330. package/dist/metrics/grafanaExport.js.map +1 -0
  331. package/dist/metrics/index.d.ts +17 -0
  332. package/dist/metrics/index.d.ts.map +1 -0
  333. package/dist/metrics/index.js +17 -0
  334. package/dist/metrics/index.js.map +1 -0
  335. package/dist/metrics/leadsMetrics.d.ts +48 -0
  336. package/dist/metrics/leadsMetrics.d.ts.map +1 -0
  337. package/dist/metrics/leadsMetrics.js +82 -0
  338. package/dist/metrics/leadsMetrics.js.map +1 -0
  339. package/dist/metrics/leadsMetrics.test.d.ts +2 -0
  340. package/dist/metrics/leadsMetrics.test.d.ts.map +1 -0
  341. package/dist/metrics/leadsMetrics.test.js.map +1 -0
  342. package/dist/metrics/metricsTypes.d.ts +114 -0
  343. package/dist/metrics/metricsTypes.d.ts.map +1 -0
  344. package/dist/metrics/metricsTypes.js +7 -0
  345. package/dist/metrics/metricsTypes.js.map +1 -0
  346. package/dist/metrics/revenueProjection.d.ts +44 -0
  347. package/dist/metrics/revenueProjection.d.ts.map +1 -0
  348. package/dist/metrics/revenueProjection.js +239 -0
  349. package/dist/metrics/revenueProjection.js.map +1 -0
  350. package/dist/metrics/revenueTypes.d.ts +62 -0
  351. package/dist/metrics/revenueTypes.d.ts.map +1 -0
  352. package/dist/metrics/revenueTypes.js +7 -0
  353. package/dist/metrics/revenueTypes.js.map +1 -0
  354. package/dist/metrics/roiCalculator.d.ts +39 -0
  355. package/dist/metrics/roiCalculator.d.ts.map +1 -0
  356. package/dist/metrics/roiCalculator.js +128 -0
  357. package/dist/metrics/roiCalculator.js.map +1 -0
  358. package/dist/metrics/roiCalculator.test.d.ts +2 -0
  359. package/dist/metrics/roiCalculator.test.d.ts.map +1 -0
  360. package/dist/metrics/roiCalculator.test.js.map +1 -0
  361. package/dist/metrics/trendMetrics.d.ts +51 -0
  362. package/dist/metrics/trendMetrics.d.ts.map +1 -0
  363. package/dist/metrics/trendMetrics.js +116 -0
  364. package/dist/metrics/trendMetrics.js.map +1 -0
  365. package/dist/modes/conservativeCTOMode.d.ts +32 -0
  366. package/dist/modes/conservativeCTOMode.d.ts.map +1 -0
  367. package/dist/modes/conservativeCTOMode.js +98 -0
  368. package/dist/modes/conservativeCTOMode.js.map +1 -0
  369. package/dist/modes/index.d.ts +3 -0
  370. package/dist/modes/index.d.ts.map +1 -0
  371. package/dist/modes/index.js +3 -0
  372. package/dist/modes/index.js.map +1 -0
  373. package/dist/modes/seniorDeveloperMode.d.ts +17 -0
  374. package/dist/modes/seniorDeveloperMode.d.ts.map +1 -0
  375. package/dist/modes/seniorDeveloperMode.js +77 -0
  376. package/dist/modes/seniorDeveloperMode.js.map +1 -0
  377. package/dist/recovery/contextRecovery.d.ts +28 -0
  378. package/dist/recovery/contextRecovery.d.ts.map +1 -0
  379. package/dist/recovery/contextRecovery.js +113 -0
  380. package/dist/recovery/contextRecovery.js.map +1 -0
  381. package/dist/repair/errorDiagnostics.d.ts +28 -0
  382. package/dist/repair/errorDiagnostics.d.ts.map +1 -0
  383. package/dist/repair/errorDiagnostics.js +158 -0
  384. package/dist/repair/errorDiagnostics.js.map +1 -0
  385. package/dist/repair/skillCapture.d.ts +22 -0
  386. package/dist/repair/skillCapture.d.ts.map +1 -0
  387. package/dist/repair/skillCapture.js +119 -0
  388. package/dist/repair/skillCapture.js.map +1 -0
  389. package/dist/reporting/reportGenerator.d.ts +117 -0
  390. package/dist/reporting/reportGenerator.d.ts.map +1 -0
  391. package/dist/reporting/reportGenerator.js +613 -0
  392. package/dist/reporting/reportGenerator.js.map +1 -0
  393. package/dist/reporting/templates.d.ts +68 -0
  394. package/dist/reporting/templates.d.ts.map +1 -0
  395. package/dist/reporting/templates.js +629 -0
  396. package/dist/reporting/templates.js.map +1 -0
  397. package/dist/security/owaspScanner.d.ts +74 -0
  398. package/dist/security/owaspScanner.d.ts.map +1 -0
  399. package/dist/security/owaspScanner.js +309 -0
  400. package/dist/security/owaspScanner.js.map +1 -0
  401. package/dist/security/piiRedaction.d.ts +67 -0
  402. package/dist/security/piiRedaction.d.ts.map +1 -0
  403. package/dist/security/piiRedaction.js +189 -0
  404. package/dist/security/piiRedaction.js.map +1 -0
  405. package/dist/security/secretsDetection.d.ts +47 -0
  406. package/dist/security/secretsDetection.d.ts.map +1 -0
  407. package/dist/security/secretsDetection.js +272 -0
  408. package/dist/security/secretsDetection.js.map +1 -0
  409. package/dist/subagents/builder.d.ts +33 -0
  410. package/dist/subagents/builder.d.ts.map +1 -0
  411. package/dist/subagents/builder.js +158 -0
  412. package/dist/subagents/builder.js.map +1 -0
  413. package/dist/subagents/investigator.d.ts +31 -0
  414. package/dist/subagents/investigator.d.ts.map +1 -0
  415. package/dist/subagents/investigator.js +166 -0
  416. package/dist/subagents/investigator.js.map +1 -0
  417. package/dist/subagents/orchestrator.d.ts +48 -0
  418. package/dist/subagents/orchestrator.d.ts.map +1 -0
  419. package/dist/subagents/orchestrator.js +151 -0
  420. package/dist/subagents/orchestrator.js.map +1 -0
  421. package/dist/subagents/reviewer.d.ts +31 -0
  422. package/dist/subagents/reviewer.d.ts.map +1 -0
  423. package/dist/subagents/reviewer.js +154 -0
  424. package/dist/subagents/reviewer.js.map +1 -0
  425. package/dist/telemetry/tokenCounter.d.ts +21 -0
  426. package/dist/telemetry/tokenCounter.d.ts.map +1 -0
  427. package/dist/telemetry/tokenCounter.js +49 -0
  428. package/dist/telemetry/tokenCounter.js.map +1 -0
  429. package/package.json +61 -0
  430. package/src/automation/actionApprover.ts +342 -0
  431. package/src/automation/actionExecutor.ts +399 -0
  432. package/src/automation/alertRules.ts +113 -0
  433. package/src/automation/alertSystem.ts +402 -0
  434. package/src/automation/competitorResponse.ts +511 -0
  435. package/src/automation/composioClient.ts +360 -0
  436. package/src/automation/crmExport.ts +407 -0
  437. package/src/automation/crmIntegration.ts +268 -0
  438. package/src/automation/gmailIntegration.ts +244 -0
  439. package/src/automation/index.ts +17 -0
  440. package/src/automation/jiraIntegration.ts +310 -0
  441. package/src/automation/jobQueue.ts +278 -0
  442. package/src/automation/leadQualification.ts +270 -0
  443. package/src/automation/qualificationRules.ts +304 -0
  444. package/src/automation/responseTemplates.ts +419 -0
  445. package/src/automation/scheduler.ts +254 -0
  446. package/src/automation/types.ts +270 -0
  447. package/src/cli/index.ts +646 -0
  448. package/src/compression/caveman.ts +257 -0
  449. package/src/config/configManager.ts +63 -0
  450. package/src/config/schema.ts +27 -0
  451. package/src/context/autoCompact.ts +123 -0
  452. package/src/context/readDedup.ts +84 -0
  453. package/src/context/toolBudgets.ts +43 -0
  454. package/src/core/auditLogger.ts +69 -0
  455. package/src/core/stateManager.ts +73 -0
  456. package/src/database/feedbackSchema.ts +168 -0
  457. package/src/database/leadsSchema.ts +205 -0
  458. package/src/intelligence/competitorScoring.ts +292 -0
  459. package/src/intelligence/competitorTracker.ts +362 -0
  460. package/src/intelligence/competitorTypes.ts +100 -0
  461. package/src/intelligence/competitors.json +76 -0
  462. package/src/intelligence/feedbackLoop.ts +538 -0
  463. package/src/intelligence/gitHubTracker.ts +204 -0
  464. package/src/intelligence/hackerNewsScanner.ts +121 -0
  465. package/src/intelligence/hiringSignals.ts +162 -0
  466. package/src/intelligence/index.ts +9 -0
  467. package/src/intelligence/leadEnrichment.ts +275 -0
  468. package/src/intelligence/leadEnrichmentTypes.ts +54 -0
  469. package/src/intelligence/marketScanner.ts +285 -0
  470. package/src/intelligence/polymarketScanner.ts +120 -0
  471. package/src/intelligence/redditScanner.ts +122 -0
  472. package/src/intelligence/signalAggregator.ts +94 -0
  473. package/src/intelligence/trendAnalysis.ts +140 -0
  474. package/src/intelligence/twitterScanner.ts +94 -0
  475. package/src/intelligence/types.ts +130 -0
  476. package/src/intelligence/userComplaints.ts +236 -0
  477. package/src/metrics/businessMetrics.ts +186 -0
  478. package/src/metrics/businessMetricsAgg.ts +554 -0
  479. package/src/metrics/competitorMetrics.ts +175 -0
  480. package/src/metrics/dashboardGenerator.ts +335 -0
  481. package/src/metrics/dashboardHTML.ts +637 -0
  482. package/src/metrics/grafanaExport.ts +347 -0
  483. package/src/metrics/index.ts +17 -0
  484. package/src/metrics/leadsMetrics.ts +145 -0
  485. package/src/metrics/metricsTypes.ts +129 -0
  486. package/src/metrics/revenueProjection.ts +319 -0
  487. package/src/metrics/revenueTypes.ts +67 -0
  488. package/src/metrics/roiCalculator.ts +199 -0
  489. package/src/metrics/trendMetrics.ts +190 -0
  490. package/src/modes/conservativeCTOMode.ts +124 -0
  491. package/src/modes/index.ts +6 -0
  492. package/src/modes/seniorDeveloperMode.ts +94 -0
  493. package/src/recovery/contextRecovery.ts +141 -0
  494. package/src/repair/errorDiagnostics.ts +198 -0
  495. package/src/repair/skillCapture.ts +157 -0
  496. package/src/reporting/reportGenerator.ts +802 -0
  497. package/src/reporting/templates.ts +677 -0
  498. package/src/security/owaspScanner.ts +390 -0
  499. package/src/security/phase8Hardening.ts +536 -0
  500. package/src/security/piiRedaction.ts +215 -0
  501. package/src/security/secretsDetection.js +271 -0
  502. package/src/security/secretsDetection.ts +318 -0
  503. package/src/subagents/builder.ts +277 -0
  504. package/src/subagents/investigator.ts +224 -0
  505. package/src/subagents/orchestrator.ts +212 -0
  506. package/src/subagents/reviewer.ts +215 -0
  507. package/src/telemetry/tokenCounter.ts +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/reporting/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * OWASP Top 10 Security Scanner
3
+ * Scans code for common security vulnerabilities
4
+ */
5
+ export interface SecurityFinding {
6
+ category: string;
7
+ cweId: string;
8
+ cvssScore: number;
9
+ severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
10
+ title: string;
11
+ description: string;
12
+ location?: {
13
+ file?: string;
14
+ line?: number;
15
+ column?: number;
16
+ };
17
+ remediation: string;
18
+ evidence?: string;
19
+ }
20
+ /**
21
+ * Scan code for SQL injection vulnerabilities
22
+ */
23
+ export declare function scanSQLInjection(code: string): SecurityFinding[];
24
+ /**
25
+ * Scan for hardcoded secrets
26
+ */
27
+ export declare function scanHardcodedSecrets(code: string): SecurityFinding[];
28
+ /**
29
+ * Scan for dangerous use of eval()
30
+ */
31
+ export declare function scanDangerousEval(code: string): SecurityFinding[];
32
+ /**
33
+ * Scan for XSS vulnerabilities
34
+ */
35
+ export declare function scanXSS(code: string): SecurityFinding[];
36
+ /**
37
+ * Scan for insecure deserialization
38
+ */
39
+ export declare function scanInsecureDeserialization(code: string): SecurityFinding[];
40
+ /**
41
+ * Scan for CORS misconfigurations
42
+ */
43
+ export declare function scanCORSMisconfiguration(code: string): SecurityFinding[];
44
+ /**
45
+ * Scan for unvalidated redirects
46
+ */
47
+ export declare function scanUnvalidatedRedirect(code: string): SecurityFinding[];
48
+ /**
49
+ * Scan for missing authentication on sensitive endpoints
50
+ */
51
+ export declare function scanMissingAuth(code: string): SecurityFinding[];
52
+ /**
53
+ * Main scanner - run all checks
54
+ */
55
+ export declare function scanCode(code: string): SecurityFinding[];
56
+ /**
57
+ * Scan file with location information
58
+ */
59
+ export declare function scanFileForVulnerabilities(filePath: string, content: string): Promise<SecurityFinding[]>;
60
+ /**
61
+ * Generate security report
62
+ */
63
+ export declare function generateSecurityReport(findings: SecurityFinding[]): {
64
+ summary: {
65
+ total: number;
66
+ critical: number;
67
+ high: number;
68
+ medium: number;
69
+ low: number;
70
+ };
71
+ findings: SecurityFinding[];
72
+ riskLevel: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'NONE';
73
+ };
74
+ //# sourceMappingURL=owaspScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owaspScanner.d.ts","sourceRoot":"","sources":["../../src/security/owaspScanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqBpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBvD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsB3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBxE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqB/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqBxD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG;IACnE,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC5D,CAoBA"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * OWASP Top 10 Security Scanner
3
+ * Scans code for common security vulnerabilities
4
+ */
5
+ const PATTERNS = {
6
+ // A01: SQL Injection - unparameterized queries
7
+ SQL_INJECTION: [
8
+ /\.query\s*\(\s*["'`]\s*SELECT\s+/gi,
9
+ /\.execute\s*\(\s*["'`]\s*SELECT\s+/gi,
10
+ /sql\s*=\s*["'`]\s*SELECT\s+.*\+\s*.*\s*["'`]/gi,
11
+ /db\.run\s*\(\s*["'`]\s*SELECT\s+/gi,
12
+ ],
13
+ // A02: Cryptographic Failures - hardcoded secrets
14
+ HARDCODED_SECRETS: [
15
+ /password\s*[=:]\s*["']([^"']+)["']/gi,
16
+ /secret\s*[=:]\s*["']([^"']+)["']/gi,
17
+ /token\s*[=:]\s*["']([^"']+)["']/gi,
18
+ ],
19
+ // A03: Injection - eval and Function constructor
20
+ DANGEROUS_EVAL: [
21
+ /\beval\s*\(/g,
22
+ /Function\s*\(\s*["'`]/g,
23
+ /setTimeout\s*\(\s*["'`]/g,
24
+ /setInterval\s*\(\s*["'`]/g,
25
+ ],
26
+ // A03: Injection - template injection
27
+ TEMPLATE_INJECTION: [
28
+ /render\s*\(\s*userInput\s*\)/gi,
29
+ /interpolate\s*\(\s*userInput\s*\)/gi,
30
+ /template\s*\(\s*["'`]\s*\$\{.*\}\s*["'`]/gi,
31
+ ],
32
+ // A04: Insecure Object Deserialization
33
+ INSECURE_DESERIALIZATION: [
34
+ /JSON\.parse\s*\(\s*userInput\s*\)/gi,
35
+ /pickle\.loads\s*\(/gi,
36
+ /unserialize\s*\(/gi,
37
+ ],
38
+ // A05: Security Misconfiguration - CORS
39
+ INSECURE_CORS: [
40
+ /Access-Control-Allow-Origin\s*[:=]\s*["']\*["']/gi,
41
+ /cors\s*\(\s*\{[^}]*origin[^}]*\*[^}]*\}/gi,
42
+ ],
43
+ // A06: Vulnerable Components - known patterns
44
+ VULNERABLE_DEPENDENCIES: [
45
+ /require\s*\(\s*["']lodash\.template["']\s*\)/gi,
46
+ /require\s*\(\s*["']express-unless["']\s*\)/gi,
47
+ ],
48
+ // A07: Missing Authentication
49
+ MISSING_AUTH: [
50
+ /router\.get\s*\(\s*["'](\/admin|\/api).*["']\s*,\s*\(req,\s*res\)\s*=>/gi,
51
+ /router\.post\s*\(\s*["'](\/admin|\/api).*["']\s*,\s*\(req,\s*res\)\s*=>/gi,
52
+ ],
53
+ // A09: Using Components with Known Vulnerabilities
54
+ OUTDATED_DEPENDENCIES: [
55
+ /"name":\s*"lodash"[^}]*"version":\s*"[0-3]\.[0-9]+\.[0-9]+"/gi,
56
+ /"name":\s*"express"[^}]*"version":\s*"[34]\.[0-9]+\.[0-9]+"/gi,
57
+ ],
58
+ // A10: SSRF - unvalidated redirects
59
+ UNVALIDATED_REDIRECT: [
60
+ /redirect\s*\(\s*userInput\s*\)/gi,
61
+ /window\.location\s*=\s*userInput/gi,
62
+ /res\.redirect\s*\(\s*req\.query\.url\s*\)/gi,
63
+ ],
64
+ // XSS - user input in HTML
65
+ XSS_VULNERABILITY: [
66
+ /innerHTML\s*=\s*userInput/gi,
67
+ /innerHTML\s*=\s*req\.query\./gi,
68
+ /innerHTML\s*=\s*req\.body\./gi,
69
+ /dangerouslySetInnerHTML/g,
70
+ ],
71
+ };
72
+ /**
73
+ * Scan code for SQL injection vulnerabilities
74
+ */
75
+ export function scanSQLInjection(code) {
76
+ const findings = [];
77
+ for (const pattern of PATTERNS.SQL_INJECTION) {
78
+ const matches = code.matchAll(pattern);
79
+ for (const match of matches) {
80
+ findings.push({
81
+ category: 'A01: SQL Injection',
82
+ cweId: 'CWE-89',
83
+ cvssScore: 9.8,
84
+ severity: 'CRITICAL',
85
+ title: 'Potential SQL Injection Vulnerability',
86
+ description: 'Unparameterized SQL query detected. This can be exploited to modify or retrieve database contents.',
87
+ remediation: 'Use parameterized queries or prepared statements with bound parameters.',
88
+ evidence: match[0].substring(0, 60),
89
+ });
90
+ }
91
+ }
92
+ return findings;
93
+ }
94
+ /**
95
+ * Scan for hardcoded secrets
96
+ */
97
+ export function scanHardcodedSecrets(code) {
98
+ const findings = [];
99
+ for (const pattern of PATTERNS.HARDCODED_SECRETS) {
100
+ const matches = code.matchAll(pattern);
101
+ for (const match of matches) {
102
+ findings.push({
103
+ category: 'A02: Cryptographic Failures',
104
+ cweId: 'CWE-798',
105
+ cvssScore: 9.8,
106
+ severity: 'CRITICAL',
107
+ title: 'Hardcoded Secret Detected',
108
+ description: 'Credentials or secrets hardcoded in source code. This enables credential theft.',
109
+ remediation: 'Store credentials in environment variables, secure vaults (AWS Secrets Manager, HashiCorp Vault), or .env files (never committed).',
110
+ evidence: match[0].substring(0, 60),
111
+ });
112
+ }
113
+ }
114
+ return findings;
115
+ }
116
+ /**
117
+ * Scan for dangerous use of eval()
118
+ */
119
+ export function scanDangerousEval(code) {
120
+ const findings = [];
121
+ for (const pattern of PATTERNS.DANGEROUS_EVAL) {
122
+ const matches = code.matchAll(pattern);
123
+ for (const match of matches) {
124
+ findings.push({
125
+ category: 'A03: Injection',
126
+ cweId: 'CWE-95',
127
+ cvssScore: 8.6,
128
+ severity: 'HIGH',
129
+ title: 'Use of eval() or similar Dangerous Function',
130
+ description: 'eval() and similar functions can execute arbitrary code and should be avoided.',
131
+ remediation: 'Replace eval() with safer alternatives: JSON.parse() for JSON, or template literals with proper escaping.',
132
+ evidence: match[0].substring(0, 60),
133
+ });
134
+ }
135
+ }
136
+ return findings;
137
+ }
138
+ /**
139
+ * Scan for XSS vulnerabilities
140
+ */
141
+ export function scanXSS(code) {
142
+ const findings = [];
143
+ for (const pattern of PATTERNS.XSS_VULNERABILITY) {
144
+ const matches = code.matchAll(pattern);
145
+ for (const match of matches) {
146
+ findings.push({
147
+ category: 'A03: Injection - XSS',
148
+ cweId: 'CWE-79',
149
+ cvssScore: 6.1,
150
+ severity: 'MEDIUM',
151
+ title: 'Potential Cross-Site Scripting (XSS) Vulnerability',
152
+ description: 'User input is directly inserted into HTML without sanitization. This allows attackers to inject malicious scripts.',
153
+ remediation: 'Use context-aware output encoding, Content Security Policy (CSP), and templating engines that auto-escape by default.',
154
+ evidence: match[0].substring(0, 60),
155
+ });
156
+ }
157
+ }
158
+ return findings;
159
+ }
160
+ /**
161
+ * Scan for insecure deserialization
162
+ */
163
+ export function scanInsecureDeserialization(code) {
164
+ const findings = [];
165
+ for (const pattern of PATTERNS.INSECURE_DESERIALIZATION) {
166
+ const matches = code.matchAll(pattern);
167
+ for (const match of matches) {
168
+ findings.push({
169
+ category: 'A08: Software and Data Integrity Failures',
170
+ cweId: 'CWE-502',
171
+ cvssScore: 8.1,
172
+ severity: 'HIGH',
173
+ title: 'Insecure Deserialization',
174
+ description: 'Deserializing untrusted data can lead to remote code execution or object injection attacks.',
175
+ remediation: 'Validate and sanitize all input before deserialization. Consider using safer formats like JSON instead of binary serialization.',
176
+ evidence: match[0].substring(0, 60),
177
+ });
178
+ }
179
+ }
180
+ return findings;
181
+ }
182
+ /**
183
+ * Scan for CORS misconfigurations
184
+ */
185
+ export function scanCORSMisconfiguration(code) {
186
+ const findings = [];
187
+ for (const pattern of PATTERNS.INSECURE_CORS) {
188
+ const matches = code.matchAll(pattern);
189
+ for (const match of matches) {
190
+ findings.push({
191
+ category: 'A01: Broken Access Control',
192
+ cweId: 'CWE-942',
193
+ cvssScore: 5.3,
194
+ severity: 'MEDIUM',
195
+ title: 'Insecure CORS Configuration',
196
+ description: 'CORS allows all origins (*). This enables any website to access resources, bypassing same-origin policy.',
197
+ remediation: 'Explicitly specify allowed origins in CORS configuration. Never use wildcard (*) for sensitive APIs.',
198
+ evidence: match[0].substring(0, 60),
199
+ });
200
+ }
201
+ }
202
+ return findings;
203
+ }
204
+ /**
205
+ * Scan for unvalidated redirects
206
+ */
207
+ export function scanUnvalidatedRedirect(code) {
208
+ const findings = [];
209
+ for (const pattern of PATTERNS.UNVALIDATED_REDIRECT) {
210
+ const matches = code.matchAll(pattern);
211
+ for (const match of matches) {
212
+ findings.push({
213
+ category: 'A01: Broken Access Control',
214
+ cweId: 'CWE-601',
215
+ cvssScore: 6.1,
216
+ severity: 'MEDIUM',
217
+ title: 'Unvalidated Redirect',
218
+ description: 'Redirecting to user-supplied URL without validation enables phishing attacks.',
219
+ remediation: 'Validate redirect URLs against a whitelist. Use relative URLs when possible.',
220
+ evidence: match[0].substring(0, 60),
221
+ });
222
+ }
223
+ }
224
+ return findings;
225
+ }
226
+ /**
227
+ * Scan for missing authentication on sensitive endpoints
228
+ */
229
+ export function scanMissingAuth(code) {
230
+ const findings = [];
231
+ for (const pattern of PATTERNS.MISSING_AUTH) {
232
+ const matches = code.matchAll(pattern);
233
+ for (const match of matches) {
234
+ findings.push({
235
+ category: 'A01: Broken Authentication',
236
+ cweId: 'CWE-306',
237
+ cvssScore: 8.1,
238
+ severity: 'HIGH',
239
+ title: 'Missing Authentication on Sensitive Endpoint',
240
+ description: 'Admin or API endpoints without authentication checks are exposed to unauthorized access.',
241
+ remediation: 'Add authentication and authorization checks to all sensitive endpoints. Use middleware to enforce authentication.',
242
+ evidence: match[0].substring(0, 60),
243
+ });
244
+ }
245
+ }
246
+ return findings;
247
+ }
248
+ /**
249
+ * Main scanner - run all checks
250
+ */
251
+ export function scanCode(code) {
252
+ if (!code || typeof code !== 'string') {
253
+ return [];
254
+ }
255
+ const findings = [
256
+ ...scanSQLInjection(code),
257
+ ...scanHardcodedSecrets(code),
258
+ ...scanDangerousEval(code),
259
+ ...scanXSS(code),
260
+ ...scanInsecureDeserialization(code),
261
+ ...scanCORSMisconfiguration(code),
262
+ ...scanUnvalidatedRedirect(code),
263
+ ...scanMissingAuth(code),
264
+ ];
265
+ // Deduplicate and sort by severity
266
+ const unique = Array.from(new Map(findings.map((f) => [f.evidence, f])).values());
267
+ const severityOrder = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
268
+ return unique.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
269
+ }
270
+ /**
271
+ * Scan file with location information
272
+ */
273
+ export async function scanFileForVulnerabilities(filePath, content) {
274
+ const findings = scanCode(content);
275
+ return findings.map((f) => ({
276
+ ...f,
277
+ location: {
278
+ file: filePath,
279
+ ...f.location,
280
+ },
281
+ }));
282
+ }
283
+ /**
284
+ * Generate security report
285
+ */
286
+ export function generateSecurityReport(findings) {
287
+ const summary = {
288
+ total: findings.length,
289
+ critical: findings.filter((f) => f.severity === 'CRITICAL').length,
290
+ high: findings.filter((f) => f.severity === 'HIGH').length,
291
+ medium: findings.filter((f) => f.severity === 'MEDIUM').length,
292
+ low: findings.filter((f) => f.severity === 'LOW').length,
293
+ };
294
+ let riskLevel = 'NONE';
295
+ if (summary.critical > 0)
296
+ riskLevel = 'CRITICAL';
297
+ else if (summary.high > 0)
298
+ riskLevel = 'HIGH';
299
+ else if (summary.medium > 0)
300
+ riskLevel = 'MEDIUM';
301
+ else if (summary.low > 0)
302
+ riskLevel = 'LOW';
303
+ return {
304
+ summary,
305
+ findings,
306
+ riskLevel,
307
+ };
308
+ }
309
+ //# sourceMappingURL=owaspScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owaspScanner.js","sourceRoot":"","sources":["../../src/security/owaspScanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * PII Redaction Module
3
+ * Masks personally identifiable information in logs and metrics
4
+ */
5
+ /**
6
+ * Mask email address
7
+ * user@example.com → user@***.com
8
+ */
9
+ export declare function redactEmail(email: string): string;
10
+ /**
11
+ * Mask phone number
12
+ * 555-123-4567 → ***-***-4567
13
+ */
14
+ export declare function redactPhone(phone: string): string;
15
+ /**
16
+ * Mask SSN
17
+ * 123-45-6789 → ***-**-6789
18
+ */
19
+ export declare function redactSSN(ssn: string): string;
20
+ /**
21
+ * Mask credit card
22
+ * 1234-5678-9012-3456 → **-3456
23
+ */
24
+ export declare function redactCreditCard(text: string): string;
25
+ /**
26
+ * Mask IPv4 address
27
+ * 192.168.1.1 → 192.168.*.*
28
+ */
29
+ export declare function redactIPv4(text: string): string;
30
+ /**
31
+ * Hash session ID for logs
32
+ * Allows correlation without exposing the actual ID
33
+ */
34
+ export declare function redactSessionId(sessionId: string): string;
35
+ /**
36
+ * Hash user ID for logs
37
+ * Allows correlation without exposing the actual ID
38
+ */
39
+ export declare function redactUserId(userId: string | number): string;
40
+ /**
41
+ * Mask UUID
42
+ * a1b2c3d4-e5f6-7890-abcd-ef1234567890 → a1b2****-****-****-****-****34567890
43
+ */
44
+ export declare function redactUUID(text: string): string;
45
+ /**
46
+ * Redact all PII from a string
47
+ */
48
+ export declare function redactText(text: string): string;
49
+ /**
50
+ * Redact PII from metrics payload
51
+ */
52
+ export declare function redactMetrics(metrics: any): any;
53
+ /**
54
+ * Create a safe log entry with PII redacted
55
+ */
56
+ export declare function createSafeLogEntry(level: string, message: string, context?: any): {
57
+ level: string;
58
+ message: string;
59
+ timestamp: string;
60
+ context?: any;
61
+ };
62
+ /**
63
+ * Validate that no PII is present in the given text
64
+ * Returns true if PII is found, false if clean
65
+ */
66
+ export declare function containsPII(text: string): boolean;
67
+ //# sourceMappingURL=piiRedaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piiRedaction.d.ts","sourceRoot":"","sources":["../../src/security/piiRedaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CA2D/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,GAAG,GACZ;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAOA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjD"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * PII Redaction Module
3
+ * Masks personally identifiable information in logs and metrics
4
+ */
5
+ import { createHash } from 'crypto';
6
+ const PATTERNS = {
7
+ EMAIL: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
8
+ PHONE: /(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})/g,
9
+ SSN: /(\d{3})[-]?(\d{2})[-]?(\d{4})/g,
10
+ CREDIT_CARD: /\b(?:\d{4}[-\s]?){3}\d{4}\b/g,
11
+ IPV4: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
12
+ UUID: /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,
13
+ SESSION_ID: /(?:sessionId|session_id|sid)['":\s=]*([a-zA-Z0-9-]{20,})/gi,
14
+ USER_ID: /(?:userId|user_id|uid)['":\s=]*(\d+|[a-f0-9-]{36})/gi,
15
+ };
16
+ /**
17
+ * Mask email address
18
+ * user@example.com → user@***.com
19
+ */
20
+ export function redactEmail(email) {
21
+ return email.replace(PATTERNS.EMAIL, (match) => {
22
+ const [local, domain] = match.split('@');
23
+ return `${local}@***.${domain.split('.').pop()}`;
24
+ });
25
+ }
26
+ /**
27
+ * Mask phone number
28
+ * 555-123-4567 → ***-***-4567
29
+ */
30
+ export function redactPhone(phone) {
31
+ return phone.replace(PATTERNS.PHONE, '***-***-$3');
32
+ }
33
+ /**
34
+ * Mask SSN
35
+ * 123-45-6789 → ***-**-6789
36
+ */
37
+ export function redactSSN(ssn) {
38
+ return ssn.replace(PATTERNS.SSN, '***-**-$3');
39
+ }
40
+ /**
41
+ * Mask credit card
42
+ * 1234-5678-9012-3456 → **-3456
43
+ */
44
+ export function redactCreditCard(text) {
45
+ return text.replace(PATTERNS.CREDIT_CARD, (match) => {
46
+ const lastFour = match.replace(/\D/g, '').slice(-4);
47
+ return `**-${lastFour}`;
48
+ });
49
+ }
50
+ /**
51
+ * Mask IPv4 address
52
+ * 192.168.1.1 → 192.168.*.*
53
+ */
54
+ export function redactIPv4(text) {
55
+ return text.replace(PATTERNS.IPV4, (match) => {
56
+ const parts = match.split('.');
57
+ return `${parts[0]}.${parts[1]}.*.*`;
58
+ });
59
+ }
60
+ /**
61
+ * Hash session ID for logs
62
+ * Allows correlation without exposing the actual ID
63
+ */
64
+ export function redactSessionId(sessionId) {
65
+ if (!sessionId)
66
+ return 'unknown';
67
+ const hash = createHash('sha256').update(sessionId).digest('hex');
68
+ return hash.substring(0, 8);
69
+ }
70
+ /**
71
+ * Hash user ID for logs
72
+ * Allows correlation without exposing the actual ID
73
+ */
74
+ export function redactUserId(userId) {
75
+ if (!userId)
76
+ return 'unknown';
77
+ const str = String(userId);
78
+ const hash = createHash('sha256').update(str).digest('hex');
79
+ return hash.substring(0, 8);
80
+ }
81
+ /**
82
+ * Mask UUID
83
+ * a1b2c3d4-e5f6-7890-abcd-ef1234567890 → a1b2****-****-****-****-****34567890
84
+ */
85
+ export function redactUUID(text) {
86
+ return text.replace(PATTERNS.UUID, (match) => {
87
+ return `${match.substring(0, 4)}****-****-****-****-****${match.substring(32)}`;
88
+ });
89
+ }
90
+ /**
91
+ * Redact all PII from a string
92
+ */
93
+ export function redactText(text) {
94
+ if (!text || typeof text !== 'string')
95
+ return text;
96
+ let result = text;
97
+ result = redactEmail(result);
98
+ result = redactPhone(result);
99
+ result = redactSSN(result);
100
+ result = redactCreditCard(result);
101
+ result = redactIPv4(result);
102
+ result = redactUUID(result);
103
+ return result;
104
+ }
105
+ /**
106
+ * Redact PII from metrics payload
107
+ */
108
+ export function redactMetrics(metrics) {
109
+ if (!metrics || typeof metrics !== 'object')
110
+ return metrics;
111
+ const redacted = JSON.parse(JSON.stringify(metrics));
112
+ // Redact known PII fields
113
+ const piiFields = [
114
+ 'email',
115
+ 'phone',
116
+ 'ssn',
117
+ 'creditCard',
118
+ 'userId',
119
+ 'userName',
120
+ 'sessionId',
121
+ 'ipAddress',
122
+ 'hostname',
123
+ ];
124
+ for (const field of piiFields) {
125
+ if (redacted[field]) {
126
+ switch (field) {
127
+ case 'email':
128
+ redacted[field] = redactEmail(redacted[field]);
129
+ break;
130
+ case 'phone':
131
+ redacted[field] = redactPhone(redacted[field]);
132
+ break;
133
+ case 'ssn':
134
+ redacted[field] = redactSSN(redacted[field]);
135
+ break;
136
+ case 'creditCard':
137
+ redacted[field] = redactCreditCard(redacted[field]);
138
+ break;
139
+ case 'userId':
140
+ redacted[field] = redactUserId(redacted[field]);
141
+ break;
142
+ case 'sessionId':
143
+ redacted[field] = redactSessionId(redacted[field]);
144
+ break;
145
+ case 'ipAddress':
146
+ redacted[field] = redactIPv4(redacted[field]);
147
+ break;
148
+ case 'hostname':
149
+ redacted[field] = `***`;
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ // Recursively redact nested objects
155
+ for (const key in redacted) {
156
+ if (typeof redacted[key] === 'string') {
157
+ redacted[key] = redactText(redacted[key]);
158
+ }
159
+ else if (typeof redacted[key] === 'object' && redacted[key] !== null) {
160
+ redacted[key] = redactMetrics(redacted[key]);
161
+ }
162
+ }
163
+ return redacted;
164
+ }
165
+ /**
166
+ * Create a safe log entry with PII redacted
167
+ */
168
+ export function createSafeLogEntry(level, message, context) {
169
+ return {
170
+ level,
171
+ message: redactText(message),
172
+ timestamp: new Date().toISOString(),
173
+ context: context ? redactMetrics(context) : undefined,
174
+ };
175
+ }
176
+ /**
177
+ * Validate that no PII is present in the given text
178
+ * Returns true if PII is found, false if clean
179
+ */
180
+ export function containsPII(text) {
181
+ if (!text || typeof text !== 'string')
182
+ return false;
183
+ return (PATTERNS.EMAIL.test(text) ||
184
+ PATTERNS.PHONE.test(text) ||
185
+ PATTERNS.SSN.test(text) ||
186
+ PATTERNS.CREDIT_CARD.test(text) ||
187
+ PATTERNS.IPV4.test(text));
188
+ }
189
+ //# sourceMappingURL=piiRedaction.js.map